《Java面向对象》
第三章 继承与多态——实例运用及知识点总结
多态:多种形态。
重载:一个类中具有相同的方法,但这些方法的参数类型和个数不同。
重写:子类包含父类同名的方法。
super:父类的构造方法。
Java中的继承为单继承,即一个子类只能有一个直接的父亲。
多态在编译时,可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。
注意:构造方法不能被继承!!!
下面是练习列题:
一、要求如下:
①创建database类,它相当于仓库,用于存放CD、DVD等光碟;
②CD、DVD等光碟类都具有相同的属性(标题title,播放时间playtime,是否外借isBrrow),在构造函数中初始化,以及方法print(输出三个属性);
③对于CD类,还需要添加独有的属性:艺术家artist,并且需要通过方法print输出,因此这里需要重写父类方法
④DVD类需要添加独有属性:导演director,并且需要通过方法print输出,因此这里需要重写父类方法
⑤最后将创建的CD、DVD对象存入database对象中,并打印database仓库中所有的光碟。
效果图如下所示:
下面是实现代码:
代码一
package 继承与多态;
public class Database {
private String title;
private int playtime;
private String isBrrow;
public Database(String title,int playtime){
this.title=title;
this.playtime=playtime;
}
public void print(){
System.out.println("标题:"+this.title+",播放时间:"+this.playtime);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPlaytime() {
return playtime;
}
public void setPlaytime(int playtime) {
this.playtime = playtime;
}
public String getIsBrrow() {
return isBrrow;
}
public void setIsBrrow(String isBrrow) {
this.isBrrow = isBrrow;}
}
代码二:
package 继承与多态;
public class CD extends Database{
public CD(String title, int playtime) {
super(title, playtime);
}
String artist="买辣椒也用券";
public void print(){
System.out.println("标题:"+super.getTitle()+",播放时间:"+super.getPlaytime()+"艺术家:"+artist);
}
}
代码三:
package 继承与多态;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Database c1=new CD("起风了", 3);
c1.print();
DVD d1=new DVD("一出好戏", 125);
d1.print();
}
}
代码四:
package 继承与多态;
public class DVD extends Database{
public DVD(String title, int playtime) {
super(title, playtime);
}
String director="黄渤";
public void print(){
System.out.println("标题:"+super.getTitle()+",播放时间:"+super.getPlaytime()+"艺术家:"+director);
}
}
二、按要求编写一个Java应用程序:
(1)定义一个类,描述一个矩形Rectangle,包含有长、宽两种属性和计算面积方法getArea()。
(2)编写一个类Rectangular,继承自矩形类,同时该类描述长方体,具有长、宽、高属性和计算体积的方法。
(3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。
实现代码如下:
代码一:
package com.chapter;
public class Rectangle {
// (1)定义一个类,描述一个矩形Rectangle,包含有长、宽两种属性和计算面积方法getArea()。
// (2)编写一个类Rectangular,继承自矩形类,同时该类描述长方体,具有长、宽、高属性和计算体积的方法。
// (3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。
package com.chapter;
public class Rectangle {
double longth;
double width;
public Rectangle(double longth,double width){
this.longth=longth;
this.width=width;
}
public double getArea(){
return longth*width;
}
public void getArea1(){
System.out.println("底面积:"+getArea());
}
}
代码二:
package com.chapter;
public class Rectangular extends Rectangle{
double height;
public Rectangular(double longth,double width,double height){
super(longth,width);
this.height=height;
}
public void getTiJi(){
double res=this.getArea();
System.out.println(res*this.height);
}
}
代码三:
package com.chapter;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Rectangle R1=new Rectangle(3,4);
R1.getArea1();
Rectangular r2=new Rectangular(3,4,5);
r2.getTiJi();
}
}
注:代码若存在错误或有别的编写方法,感谢指正。