目录
一、实验目的
二、实验内容
三、实验小结
一、实验目的
- 了解继承的概念,掌握派生类的定义。
- 掌握派生类构造方法的执行过程。
- 掌握方法的重载与覆盖。
- 掌握抽象类的概念及上转型对象的使用
二、实验内容
1、定义一个抽象类Shape,类中封装属性name指定图形名称,定义用于求面积的抽象方法。定义3个子类:圆形类Circle、梯形类Trapezoid和三角形类Triangle,都继承Shape类,子类中各自新增属性(上转对象无法访问),定义构造方法、设置属性值的方法并重写shape类中的方法。在Circle类和Triangle类中还新增求周长的方法(上转对象无法调用)。在主类中定义Shape类的对象,创建子类对象,设置其属性值,并输出其面积与周长,在程序中要体现上转型对象的使用。
源代码:
实验运行截图:
2. 假设银行 Bank 已经有了按整年 year 计算利息的一般方法,其中 year 只能取正整数。比如按整年计算的方法:
double computerInterest() {
interest=year * 0.35 * savedMoney;
return interest;
}
建设银行 ConstructionBank 是 Bank 的子类,准备隐藏继承的成员变量 year,并重写计算利息的方法,即自己声明一个 double 型的 year 变量,比如,当 year 取值是 5.216 时,表示要计算 5 年零 216 天的利息,但希望首先按银行 Bank 的方法 computerInterest()计算出 5 整年的利息,然后再自己计算 216 天的利息,活期存款利息计算公式为:活期存款天数/360*活期存款利率*存款金额。那么,建设银行就必须把 5.216 的整数部分赋给隐藏的 year,并让 super 调用隐藏的、按整年计算利息的方法。
要求 ConstructionBank 和 BankOfDalian 类是 Bank 类的子类,ConstructionBank 和
BankOfDalian 都使用 super 调用隐藏的成员变量和方法。
ConstructionBank、BankOfDalian 和 Bank 类的 UML 图如下图所示。
源代码:
实验运行截图:
三、实验小结
1、继承就是将各类中相同的成员变量和方法抽出来,单独放在一个类中(父类),这样各子类就可以复用父类中的成员作为自己的成员。
2、成员变量和方法(*访问限制符在本类中不起作用):
2.1默认的(友好的)的 ,同包(同文件夹)下通过类的对象能继承能访问,不同包下不能继承和访问。默认的类同包下能继承能创建对象。
2.2 protected(受保护的),同包下对象能继承能访问,不同包下能继承不能访问。
2.3 public(公共的),任何场景下能继承能访问。修饰的类能继承能创建对象,必须单独在一个文件夹中。
2.4 private(私有的),任何场景下不能继承不能访问。
2.5 final(最终的),修饰的变量是常量、声明时必须初始化,中途不能修改其值;修饰的方法不能被子类重写。修饰的类不能被继承。
2.6 abstract修饰的方法为抽象方法、不能有函数体,只能位于抽象类中,由抽象类的子类对其进行重写。修饰的类不能创建对象,一般做父类用。
3、A instanceof B 运算符用于判断某对象是否是属于某个子类或父类,是则返回true,否则返回false。
4、 如果在子类中有和父类重名继承的成员变量或类型名、方法名、方法的参数相同的方法,则子类创建的对象只能操作子类中的重名的变量或方法,除非通过super来调用父类中的重名变量或被复写的方法。
5、super关键字既可以的调用父类中被隐藏的变量和被重写的方法,还可以通过”super()”调用父类中构造方法且必须位于子类构造方法中的首个语句。
6、父类中的构造方法不会被子类继承。且用户使用new创建对象时,会自动先通过子类的构造方法调用父类中的无参构造方法、然后再执行子类中的构造代码。
7、对象的上转型对象:
7.1先为父类声明一个对象
7.2 然后将创建的子类对象的引用地址赋值给父类创建的变量。此变量此时就是上转型对象。
上转对象只能操作父类中继承的变量和方法和子类重写抽象类中的方法;不能操作子类中的变量和方法。
8、子类对象调用父类中的方法,此时父类中的方法只能操作父类中的成员变量和方法,无法操作子类中的成员变量和方法。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!