实验要求
1、什么是多态,谈谈你对多态的理解,多态情况下方法执行
2、一个类可以有几个父类,一个父类可以有几个子类,子类能获取父类的构造方法吗?
3、重写重载的区别
4、super关键字 与this关键字
5、抽象类和抽象方法
6、final关键字
7、多态是编译时行为还是运行时行为?【运行时行为】
public class Test {
public static void main(String[] args) {
Sun sun = new Sun();
System.out.println(sun.num);
sun.print();
Father father = (Father)sun;
System.out.println(father.num);
father.print();
}
}
class Father{
int num=100;
public void print(){
System.out.println(this.num);
}
}
class Sun extends Father{
int num=200;
public void print(){
System.out.println(this.num);
}
}
8、编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。
9、父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等,编写displayGeometricObject方法显示对象的面积。
10、编写立体图形类,SolidFigure,必须有属性高,定义圆柱体Cylinde,长方体Rectangular。实现计算面机getArea和体积的方法getVolume。
11、简述接口的特点以及接口与抽象类的区别
实验过程
1、什么是多态,谈谈你对多态的理解,多态情况下方法执行
同一种事物,由于条件不同,所产生的结果也不相同,产生在继承情况下,父类的实例指向子类的对象
2、一个类可以有几个父类,一个父类可以有几个子类,子类能获取父类的构造方法吗?
java中类只能进行单继承,但一个类可以有多个子类,子类可以通过super关键字来调用父类的方法及成员变量,同时也可以调用构造方法
3、重写重载的区别
重写:发生在继承关系中的,子类重写父类的方法。方法名相同,参数列表相同,访问修饰符不能比父类的严格。返回值类型相同或是父类方法返回值类型的子类。
重载:发生在同一类中,方法名相同,参数列表不同,与访问修饰符和返回值类型无关。
4、super关键字与this关键字
super关键字产生在继承关系中,用于调用父类的成员变量及方法。
this关键字则用来调用本类的属性和方法
5、抽象类和抽象方法
抽象类不可以被实例化,必须要用abstract关键字来修饰类,当子类继承的父类为抽象类时,需要实现父类的抽象方法才能被实例化,否则该类还是一个抽象类。
抽象方法也需要用abstract关键字来修饰,抽象方法不能有方法体,抽象方法必须在抽象类里。
6、final关键字
final可以修饰类、方法、属性,final修饰的属性是常量,只可赋初值,不可改变;final修饰的方法可以被继承但是不能被重写;final修饰的类不能被继承。
7、多态是编译时行为还是运行时行为?【运行时行为】
因为在运行时根据代码无法确定实例化的对象是谁,只有实例化后才可以看出。
public class Test {
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.num);
son.print();
Father father = (Father)son;
System.out.println(father.num);
father.print();
}
}
class Father{
int num=100;
public void print(){
System.out.println(this.num);
}
}
class Son extends Father{
int num=200;
public void print(){
System.out.println(this.num);
}
}
200
200
100
200
8、编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。
此时equals()比较为false,因为equals方法比较时用“==”来比较,“==”会比较内存地址,内存地址一样时才返回true
重写equals()方法,当对象的属性一致时,认定这两个对象相同。
9、父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等,编写displayGeometricObject方法显示对象的面积。
10、编写立体图形类,SolidFigure,必须有属性高,定义圆柱体Cylinde,长方体Rectangular。实现计算面积getArea和体积的方法getVolume。
11、简述接口的特点以及接口与抽象类的区别
接口使用interface关键字来进行修饰,接口中所有属性和方法默认被public修饰,接口只能定义常量不能定义变量且常量都是静态常量,接口不能被实例化,接口之间的继承用extends来实现,类实现接口时用implements关键字来实现接口且实现接口时需要实现借口里的所有方法