java实验33 类的继承2_java实验2 类的继承性
實驗2 類的繼承性
一、實驗目的
掌握面向對象的繼承性在Java中的實現方法;掌握super關鍵字的用法,體會抽象類和抽象方法的作用。
二、實驗內容
1.程序理解:
1)類的繼承
2)第4章課后編程第1題
class Student {
public String name;
public int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println("name: "+name+" age: "+age);
}
}
class UnderGraduate extends Student{
public String degree;
public UnderGraduate(String name,int age,String degree){
super(name, age);
this.degree=degree;
}
public void show(){
System.out.println("name: "+name+" age: "+age+" degree: "+degree);
}
}
public class Test01{
public static void main(String[] args) {
Student student = new Student("zhangsan", 16);
student.show();
UnderGraduate underGraduate = new UnderGraduate("lisi", 20, "bechalor");
underGraduate.show();
}
2.編程題:
(1)請按照以下要求設計類。( 程序1)
要求如下:
1)設計Animal類。類中定義一個成員變量animalName,表示動物的名稱,變量animalName是String類型,默認初始值。在該類中再定義一個成員方法shout(),表示動物發出叫聲的行為,該方法能輸出名稱為animalName的動物發出叫聲,例如輸出“波斯貓發出叫聲”。
2)設計Cat類。使用關鍵字extends繼承Animal類。Cat類中定義一個public類型的構造方法,該構造方法擁有一個String類型的參數catName,通過該參數,為Cat類中繼承自Animal類的animalName成員變量賦值。
3)設計一個測試類。類名為ExtendsTest,在main方法中定義一個 String類型的name變量,并為它賦值為”波斯貓”,然后使用有參構造創建Cat類的對象,并使用對象的引用變量調用shout()方法。
(2)設計父類和一個子類,在子類里面通過super關鍵字去調用父類的成員變量和成員方法,在子類的構造方法中使用super關鍵字調用父類的構造方法,在測試類里進行驗證。(程序2)
(3)創建平面圖形抽象類(PlaneGraphic)及其子類三角形(Triangle), 圓(Circle),長方形(Rectangle)的一個繼承分級結構。在抽象類PlaneGraphic中,提供計算圖形周長和面積的抽象方法,并在各子類中實現抽象方法,從而根據不同類型的平面圖形計算相應的周長和面積。提示:三角形面積計算用海倫公式:,p為三角形的半周長。(程序3)
(4)請按照以下要求設計一個Outer類。(程序4)
要求如下:
1)定義一個外部類Outer,并在該類中定義一個靜態內部類Inner。
2)在內部類中定義一個靜態變量staticField和一個靜態方法staticMethod(),并將該變量的值設置為”靜態內部類的靜態變量”,該方法中輸出”靜態內部類的靜態方法”。
3)定義一個測試類,在main()方法中輸出staticField的值,并且調用靜態方法staticMethod()。
(5)熟悉Eclipse開發工具。
請自己學習課本第11章,熟悉使用Eclipse進行程序調試(418頁),了解jar文件的導入和導出(422頁)。
三、實驗結果和分析
說明:請截圖給出各個程序的運行結果,并做必要的分析。
(1)程序1運行結果
分析:Cat類通過extends關鍵字繼承了Animal類,這樣Cat類便是Animal類的子類。從運行結果不難看出,子類雖然沒有定義animalName屬性和shout()方法,但是卻能訪問這兩個成員,這就說明,子類在繼承父類的時候,會自動擁有父類的所有成員,Cat類定義了有參構造函數,在測試類的main方法中使用有參構造創建Cat類對象,運行結果如圖所示
(2)程序2運行結果
分析:定義了一個Child類繼承Father類,并重寫了Father類的eat()方法,在子類Child的eat()方法中使用”super.eat()”調用了父類被重寫的方法,在introFather()方法中使用“super.age”訪問父類的成員變量。從運行結果可以看出,子類通過super關鍵字成功地訪問父類的成員變量和成員方法。在實例化Child對象時一定會調用Child類的構造方法,從運行結果可以看出,Child類的構造方法被調用時,父類的構造方法也被調用了。
(3)程序3運行結果
分析:從運行結果可以看出,子類實現了父類的抽象對象后,可以正常進行實例化,并通過實例化對象調用方法。抽象類其實是約束子類的方法命名,在抽象父類中定義抽象方法,在子類中實現,不同的參數通過成員變量實現。
(4)程序4運行結果
分析:內部類Inner使用static關鍵字來修飾,是一個靜態內部類,實例化方式與非靜態的成員內部類的實例化方式不一樣,在靜態內部類中科院定義靜態的成員,而在非靜態的內部類中不允許定義靜態的成員。
四、實驗源代碼
說明:請將各程序的源代碼復制粘貼到這里。
(1)程序1源代碼
//定義Animal類
class Animal{
String animalName;
//定義動物叫的方法
void shout(){
System.out.println(animalName+"發出叫聲");
}
}
//定義Cat類繼承Animal類
class Cat extends Animal{
//類中定義一個public類型的構造方法
public Cat(String catName){
animalName=catName;
}
}
//定義測試類
public class ExtendsTest {
public static void main(String[] args) {
String name="波斯貓"; //定義一個 String類型的name變量,并為它賦值為”波斯貓”,
Cat cat=new Cat(name); //使用有參構造創建Cat類的對象
cat.shout(); //使用對象的引用變量調用shout()方法。
}
}
(2)程序2源代碼
//定義Father類
class Father{
int age=30;
String food="小熊餅干";
//定義Father類有參構造函數
public Father(String name){
System.out.println("我的名字叫"+name);
}
//定義喜歡吃的方法
void eat(){
System.out.println("我喜歡吃"+food);
}
}
//定義Child類
class Child extends Father{
//在子類的構造方法中使用super關鍵字調用父類的構造方法,
public Child(){
super("蠟筆小新");
}
//在子類里面通過super關鍵字去調用父類的成員方法,
void eat(){
super.eat();
}
//在子類里面通過super關鍵字去調用父類的成員變量
void introFather(){
System.out.println("我爸爸今年"+age+"歲了");
}
}
//定義測試類
public class Example2 {
public static void main(String[] args) {
Child child=new Child(); //創建一個Child類的實例對象
child.eat(); //調用Child類的eat方法
child.introFather(); //調用Child類的introFather方法
}
}
(3)程序3源代碼
import java.util.Scanner;
//定義抽象類PlaneGraphic
abstract class PlaneGraphic{
double area;
//定義抽象方法getArea
abstract void getArea();
}
//定義Triangle類繼承抽象類PlaneGraphic
class Triangle extends PlaneGraphic{
double a,b,c;
//定義Triangle類有參構造函數
public Triangle(double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
//實現抽象方法getArea()
void getArea(){
double p=(a+b+c)/2;
double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
System.out.println("該三角形的面積是:"+area);
}
}
//定義Circle類繼承抽象類PlaneGraphic
class Circle extends PlaneGraphic{
double r;
//定義Circle類有參構造函數
public Circle(double r){
this.r=r;
}
//實現抽象方法getArea()
void getArea(){
double area=Math.PI*r*r;
System.out.println("該圓的面積是:"+area);
}
}
//定義Rectangle類繼承抽象類PlaneGraphic
class Rectangle extends PlaneGraphic{
double x,y;
//定義Rectangle類有參構造函數
public Rectangle(double x,double y){
this.x=x;
this.y=y;
}
//實現抽象方法getArea()
void getArea(){
double area=x*y;
System.out.println("該矩形的面積是:"+area);
}
}
//定義測試類
public class Example3 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請輸入三角形的邊長:");
double a1=sc.nextDouble();
double b1=sc.nextDouble();
double c1=sc.nextDouble();
Triangle t=new Triangle(a1,b1,c1);//實例化Triangle對象
t.getArea();
System.out.println("請輸入圓的半徑:");
double r1=sc.nextDouble();
Circle c=new Circle(r1); //實例化Circle對象
c.getArea();
System.out.println("請輸入矩形的邊長:");
double x1=sc.nextDouble();
double y1=sc.nextDouble();
Rectangle re=new Rectangle(x1,y1); //實例化Rectangle對象
re.getArea();
}
}
(4)程序4源代碼
//定義一個外部類
class Outer{
//下面的代碼定義了一個靜態內部類
static class Inner{
static String staticField="靜態內部類的靜態變量";
static void staticMethod(){
System.out.println("靜態內部類的靜態方法");
}
}
}
//定義測試類
public class Example4 {
public static void main(String[] args) {
Outer.Inner inner=new Outer.Inner();//創建內部類對象
System.out.println(inner.staticField);
inner.staticMethod();
}
}
總結
以上是生活随笔為你收集整理的java实验33 类的继承2_java实验2 类的继承性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java代码数据库添加操作_java连接
- 下一篇: linux安装mysql 5.7_lin