最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java學生信息類繼承與接口的原理及使用方式

 更新時間:2024年02月06日 10:18:11   作者:超愛編程  
這篇文章主要介紹了Java學生信息類繼承與接口的原理及使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java學生信息類繼承與接口原理及使用

(1)創(chuàng)建源程序MyGroup.java,其中的內(nèi)容是接口MyGroup的聲明。

(2)創(chuàng)建源程序Undergraduate.java,其中的類Undergraduate繼承源程序Student.java中的抽象類Student,實現(xiàn)其中的抽象方法print( )。

(3)創(chuàng)建源程序Postgraduate.java,其中的類Postgraduate繼承源程序Student.java中的抽象類Student,實現(xiàn)其中的抽象方法print( ),并且,在父類的基礎上增加兩個新的屬性:導師和研究方向。

(4)StuGroup.java,MyGroup.java,Undergraduate.java,Postgraduate.java和Student.java在同一個包中。Main.java在無名包中。

上述源程序可以完成如下任務:

使用者根據(jù)提示信息,選擇從鍵盤上輸入本科生或者研究生的學生信息,可以添加學生信息、刪除學生信息、顯示學生信息、按照學生成績排序等。

項目文件結(jié)構截圖:

在這里插入圖片描述

Main.java位于無名包下

//main.java
import 包.*;
import java.util.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner in=new Scanner(System.in);
		StuGroup group=new StuGroup(20);  //group可以容納20個學生
		int num;  //實際輸入的學生信息
		System.out.println("要創(chuàng)建本科生信息表還是研究生信息表?\nA.本科生\tB.研究生");
		Scanner reader = new Scanner(System.in);
		char choice = reader.next().charAt(0);//charAt(index)用于返回索引處的字符
		switch(choice)
		{
			case 'A':
			case 'a':
			System.out.println("請問要輸入多少個本科生的信息?");
			num = reader.nextInt();
			Student stuB[] = new Undergraduate[num];//stuB[]對象數(shù)組是子類Undergraduate對象的上轉(zhuǎn)型對象
			for(int i=0;i<num;i++)
			{
				System.out.println("請輸入第"+(i+1)+"位學生的學號,姓名,數(shù)學、計算機成績");
				stuB[i] = new Undergraduate(reader.nextInt(), reader.next(),reader.nextDouble(), reader.nextDouble());//從鍵盤輸入學生信息,并賦值給學生
				group.addStu(stuB[i]);//參數(shù)為引用類型
			}
			System.out.println("輸入的本科生信息為:");
			group.print();
			group.addStu(new Undergraduate(1312,"shgd",99,98.5));
			group.addStu(new Undergraduate(1316,"ddsa",89,88.5));
			System.out.println("添加后所有本科生的信息為:");
			group.print();
			break;
		case 'B':
		case 'b':
			System.out.println("請問要輸入多少個研究生的信息?");
			num = reader.nextInt();
			 Student[] stuY = new Postgraduate[num];//stuY[]對象數(shù)組是子類Postgraduate對象的上轉(zhuǎn)型對象
			for(int i=0;i<num;i++)
			{
				System.out.println("請輸入第"+(i+1)+"位學生的學號,姓名,數(shù)學、計算機成績,導師和研究方向,以空格隔開");
				stuY[i] = new Postgraduate(reader.nextInt(), reader.next(),reader.nextDouble(), reader.nextDouble(),reader.next(),reader.next());
				group.addStu(stuY[i]);
			}
			System.out.println("輸入的研究生信息為:");
			group.print();
			group.addStu(new Postgraduate(1312,"shgd",99,98.5,"xyy","os"));
			group.addStu(new Postgraduate(1316,"ddsa",89,88.5,"wcl","rgzn"));
			System.out.println("添加后所有研究生信息為:");
			group.print();
			break;
		default:
			System.out.println("輸入錯誤?。?!");
			break;
		}
		System.out.println("刪除第幾個同學?");
		group.removeStu(reader.nextInt());
		System.out.println("最新的學生信息為:");
		group.print();
		group.sort(1);
		group.print();//按照數(shù)學成績排序后輸出
		group.sort(2);
		group.print();//按照計算機成績排序后輸出
		in.close();
	}
}

1.Student.java是學生信息類,是抽象類。里面用于學生信息的初始化,get和set方法間接操作域變量,用于對學生信息的設置和獲取。并聲明了抽象方法print();

2.Postgraduate類是Student類的子類,實現(xiàn)研究生信息的初始化,實現(xiàn)抽象方法,輸出研究生信息。

3.Undergraduate類是Student類的子類,實現(xiàn)本科生信息的初始化,實現(xiàn)抽象方法,輸出本科生信息。

4.Mygroup.java是接口聲明

6.StuGroup.java 其中的類實現(xiàn)了接口MyGroup。

是添加學生信息、刪除學生信息、顯示學生信息、按照學生成績排序,輸出學生信息方法的實現(xiàn)。

上述五個.java文件位于同一“包”文件下。

//Mygroup.java
package 包;
//接口MyGroup的聲明。
interface Mygroup
{
	boolean addStu(Student x);
	Student removeStu(int index);
	void sort(int x);
}

//Student.java
package 包;
public abstract class Student 
{
    //抽象學生類的屬性有學號(int),姓名(String),數(shù)學成績(double),計算機成績(double)
	int num;
	String name;
	double mathScore;
	double computerScore;
    //【構造方法】 
	Student(int num,String name,double mathScore,double computerScore)
	{
		this.num = num;
		this.name = name;
		this.mathScore = mathScore;
		this.computerScore = computerScore;
	}
	public void getNum(int num) 
	{
		this.num = num;
	}
	public int setNum()
	{
		return this.num;
	}
	public void getName(String name) 
	{
		this.name = name;
	}
	public String setName()
	{
		return this.name;
	}
	public void getMathScore(double mathScore)
	{
		this.mathScore = mathScore;
	}
	public double setMathScore()
	{
		return this.mathScore;
	}
	public void getComputerScore(double computerScore)
	{
		this.computerScore =computerScore;
	}
	public double setComputerScore()
	{
		return this.computerScore;
	}
   abstract void print(); //抽象方法,子類要實現(xiàn)這個方法,也就是輸出學生的信息
}

//Postgraduate.java
package 包;
//創(chuàng)建源程序Postgraduate.java,其中的類Postgraduate繼承源程序Student.java中的抽象類Student,實現(xiàn)其中的抽象方法print( ),并且,在父類的基礎上增加兩個新的屬性:導師和研究方向。
public class Postgraduate extends Student{
	
	String teacher;
	String direction;
	public Postgraduate(int num, String name, double mathScore, double computerScore,String teacher,String direction) 
	{
		super(num, name, mathScore, computerScore);//子類使用super調(diào)用父類的構造方法
		this.teacher = teacher;
		this.direction = direction;
	}
	void getTeacher(String teacher)
	{
		this.teacher =teacher;
	}
	String setTeacher()
	{
		return this.teacher;
	}
	void getDirection(String direction)
	{
		this.direction =direction;
	}
	String setDirection()
	{
		return this.direction;
	}
	void print( )//子類實現(xiàn)抽象類的方法
	{
		System.out.println("研究生學生信息為:"+"學號:"+setNum()+",姓名:"+setName()+",數(shù)學成績:"+setMathScore()+",計算機成績:"+setComputerScore()+"導師:"+setTeacher()+",研究方向:"+setDirection());
	}

}

//Undergraduate.java
package 包;
//創(chuàng)建源程序Undergraduate.java,其中的類Undergraduate繼承源程序Student.java中的抽象類Student,實現(xiàn)其中的抽象方法print( )。
public class Undergraduate extends Student{
	public Undergraduate(int num, String name, double mathScore, double computerScore) {
		super(num, name, mathScore, computerScore);//子類使用super調(diào)用父類的構造方法
	}
	 void print() 
	 {
		System.out.println("本科生信息:"+"學號:"+setNum()+" ,姓名:"+setName()+" ,數(shù)學成績:"+setMathScore()+" ,計算機成績:"+setComputerScore());
	}
}

//StuGroup.java
package 包;

public class StuGroup implements Mygroup
{
	 private Student[] stu;
	 private int length;   //實際容量
	
	 public StuGroup(int len)
	{
		  stu = new Student[len];
	}
	
	private boolean isOverflow()    //輔助方法,判斷數(shù)組是否溢出
	{
		if(this.length<stu.length)
			return false;
		else
			return true;
	}
	
	public boolean isEmpty()    //判斷數(shù)組是否為空
	{
		return this.length==0;
	}
	
	public boolean addStu(Student x)  //添加學生信息
	{
		if(isOverflow())
			return false;
		stu[length++]=x;
		return true;
	}
	
	public  Student removeStu(int index)  //刪除指定位置的學生信息
	{
		if(isEmpty())
		{
			System.out.println("學生表空的~~~刪除失敗~~~~");
			return null;
		}
		Student temp=stu[index-1];
		for(int i=index-1;i<this.length-1;i++)
		{
			stu[i]=stu[i+1];
		}
		this.length--;
		return temp;
	}
	
	
	 public void sort(int x)   //按照成績排序,參數(shù)1按數(shù)學排序,參數(shù)2按計算機排序
	{
		if(x==1)
		{
			for(int i =0;i<length-1;i++)
				for(int j =0;j<length-i-1;j++)//冒泡排序
				{
					if(stu[j].setMathScore()<stu[j+1].setMathScore())
					{
						Student temp;//聲明一個對象(引用),用于交換
						temp =stu[j+1];
						stu[j+1] = stu[j];
						stu[j] = temp;
					}
				}
			System.out.println("按數(shù)學成績降序排列為:");
	
	     }
		else if(x==2)
		{
			for(int i =0;i<length-1;i++)
				for(int j =0;j<length-i-1;j++)
				{
					if(stu[j].setComputerScore()<stu[j+1].setComputerScore())
					{
						Student temp;
						temp =stu[j+1];
						stu[j+1] = stu[j];
						stu[j] = temp;
					}
				}
			System.out.println("按計算機成績降序排名:");
		}
     }	
	public void print()
	{
		                 
		for(int i =0;i<length;i++)
			stu[i].print();//調(diào)用Student子類的print()方法
	}
		
}

結(jié)論分析

(1) 通過抽象類Student和接口MyGroup分析對比總結(jié):

Java提供和支持創(chuàng)建抽象類和接口。它們的實現(xiàn)有共同點,不同點在于:

  • 1.接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
  • 2.類可以實現(xiàn)很多個接口,類在實現(xiàn)接口方法時一定要用public來修飾,但是只能繼承一個抽象類.
  • 3.類如果要實現(xiàn)一個接口,它必須要實現(xiàn)接口聲明的所有方法。但是,類可以不實現(xiàn)抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
  • 4.抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。
  • 5.Java接口中聲明的變量默認都是final的。抽象類可以包含非final的變量。
  • 6.Java接口中的成員函數(shù)默認是public的。抽象類的成員函數(shù)可以是private,protected或者是public。
  • 7.接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調(diào)用的。

(2)Student stuB[] = new Undergraduate[num];//stuB[]對象數(shù)組是子類Undergraduate對象的上轉(zhuǎn)型對象,通過本例總結(jié):

上轉(zhuǎn)型對象具有如下特點:

  • 1.上轉(zhuǎn)型對象不能操作子類新增的成員變量(失掉了這部分屬性),不能調(diào)用子類新增的方法(失掉了一些行為)。
  • 2.上轉(zhuǎn)型對象可以訪問子類繼承和隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類重寫的方法。上轉(zhuǎn)型對象操作子類繼承的方法或子類重寫的實例方法,其作用等價于子類對象去調(diào)用這些方法。因此,如果子類重寫了父類的某個實例方法后,當對象的上轉(zhuǎn)型調(diào)用這個實例方法時一定是調(diào)用了子類重寫的實例方法。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • IntelliJ IDEA(2020.2)的下載、安裝步驟詳細教程

    IntelliJ IDEA(2020.2)的下載、安裝步驟詳細教程

    這篇文章主要介紹了IntelliJ IDEA(2020.2)的下載、安裝步驟詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 詳解Java弱引用(WeakReference)的理解與使用

    詳解Java弱引用(WeakReference)的理解與使用

    這篇文章主要介紹了Java弱引用(WeakReference)的理解與使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java窗體動態(tài)加載磁盤文件的實現(xiàn)方法

    Java窗體動態(tài)加載磁盤文件的實現(xiàn)方法

    這篇文章主要介紹了Java窗體動態(tài)加載磁盤文件的實現(xiàn)方法,需要的朋友可以參考下
    2014-03-03
  • Spring?Boot項目創(chuàng)建兩種方式的全流程

    Spring?Boot項目創(chuàng)建兩種方式的全流程

    Spring Boot是一款基于Spring Framework的開源框架,用于快速構建獨立的、可運行的、生產(chǎn)級的Spring應用程序,這篇文章主要介紹了Spring?Boot項目創(chuàng)建兩種方式的相關資料,需要的朋友可以參考下
    2025-09-09
  • RabbitMQ高級應用之消費端限流策略basicQos詳解

    RabbitMQ高級應用之消費端限流策略basicQos詳解

    這篇文章主要介紹了RabbitMQ高級應用之消費端限流策略basicQos詳解,高并發(fā)情況下,隊列里面一瞬間就就積累了上萬條數(shù)據(jù),但是消費者無法同時處理這么多請求,這種場景下我們就需要對消費端進行限流,需要的朋友可以參考下
    2023-08-08
  • MybatisPlus多表連接查詢的問題及解決方案

    MybatisPlus多表連接查詢的問題及解決方案

    MybatisPlus官方并沒有提供多表連接查詢的通用解決方案,然而連接查詢是相當普遍的需求,今天通過本文給大家介紹下MybatisPlus多表連接查詢的問題及解決方案,感興趣的朋友一起看看吧
    2022-01-01
  • java讀取json文件的2種方式例子

    java讀取json文件的2種方式例子

    這篇文章主要給大家介紹了關于java讀取json文件的2種方式,在開發(fā)過程中有時會遇到需要讀取.json文件的需求,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 詳解Eclipse 字體、字號的設置、最佳字體推薦

    詳解Eclipse 字體、字號的設置、最佳字體推薦

    這篇文章主要介紹了Eclipse 字體、字號的設置、最佳字體推薦,需要的朋友可以參考下
    2020-09-09
  • 一個簡單的類加載器URLClassLoader案例

    一個簡單的類加載器URLClassLoader案例

    這篇文章主要介紹了一個簡單的類加載器URLClassLoader案例,這里寫了一個小 demo,來加深對于反射的理解,需要的朋友可以參考下
    2023-04-04
  • 一文詳解Spring攔截鏈的實現(xiàn)原理

    一文詳解Spring攔截鏈的實現(xiàn)原理

    在?Web應用開發(fā)中,攔截器(Interceptor)是一種非常重要的機制,能夠在請求處理的各個階段進行前置和后置處理,本文主要來探討一下?Spring?攔截鏈的實現(xiàn)原理,需要的可以了解下
    2025-01-01

最新評論

五寨县| 额济纳旗| 玉龙| 阿合奇县| 五华县| 轮台县| 鄂托克前旗| 原阳县| 渝北区| 永川市| 东兰县| 沾益县| 清新县| 樟树市| 荔浦县| 蕲春县| 余姚市| 大庆市| 西青区| 麦盖提县| 贞丰县| 微山县| 万荣县| 神木县| 华容县| 偏关县| 腾冲县| 化德县| 边坝县| 尤溪县| 永年县| 德令哈市| 玉溪市| 昔阳县| 西华县| 伊宁市| 宝清县| 合川市| 旬阳县| 大城县| 宜黄县|