Java面向对象 第三章 (下半)
1.继承
(1)继承语法
[修饰符] class 子类名 [extends 父类名]{
//类成员
}
(2)子类会继承父类所有非私有成员
(3)一个子类只能有一个父类
2.重载和重写
(1)重载:方法名相同,参数列表必须不同,返回值必须相同
(2)重写,子类重写父类中的方法,方法头部必须相同。重写后父类方法会被覆盖,使用super可以调用被子类重写覆盖的方法
3.多态
(1)同一操作用于不同的对象会产生不同的结果
(2)通过父类的引用指向子类的对象,调用子类中重写父类的方法
(3)instanceof运算符,用来判断对象是不是该类的对象或该类子类的对象。也可以判断这个对象是否可以进行强制类型转换。
练习
1.练习使用继承和重写
package Test;
public class database {
String title;
int playtime;
String isBrrow;
public database(String title,int playtime,String isBrrow){
this.title = title;
this.playtime=playtime;
this.isBrrow=isBrrow;
}
public void print(){
System.out.printf("标题:%s\t播放时间:%d\t是否外借:%s\n",title,playtime,isBrrow);
}
}
package Test;
public class DVD extends database {
String director;
public DVD(String title,int playtime,String isBrrow,String director){
super(title,playtime,isBrrow);
this.director=director;
}
public void print(){
System.out.printf("标题:%s\t导演:%s\t播放时间:%d\t是否外借:%s\n",title,director,playtime,isBrrow);
}
}
package Test;
public class CD extends database {
String artist;
public CD(String title,int playtime,String isBrrow,String artist){
super(title,playtime,isBrrow);
this.artist=artist;
}
public void print(){
System.out.printf("标题:%s\t艺术家:%s\t播放时间:%d\t是否外借:%s\n",title,artist,playtime,isBrrow);
}
}
package Test;
public class Test {
public static void main(String[] args) {
database cd1= new CD("起风啦",120,"是","麦辣鸡");
database cd2= new CD("上号",43,"是","把门那样");
cd1.print();
cd2.print();
database dvd1= new DVD("一出好戏",120,"否","黄渤");
dvd1.print();
}
}
2.可以使用方法重载来传参,传入两个参数里计算长方形的面积,传入三个参数计算长方体的体积
package Test2;
public class Rectangle {
int l;
int w;
public Rectangle(int l,int w){
this.l=l;
this.w=w;
}
public int getArea(){
return l*w;
}
}
package Test2;
public class Rectangular extends Rectangle {
int h;
public Rectangular(int l, int w) {
super(l, w);
}
public Rectangular(int l, int w, int h) {
super(l, w);
this.h = h;
}
public int getVolume() {
return super.getArea() * h;
}
}
package Test2;
public class Test {
public static void main(String[] args) {
Rectangular le = new Rectangular(12, 3);
System.out.println("长方形的面积:" + le.getArea());
Rectangular ular = new Rectangular(12, 3, 4);
System.out.println("长方体的面积:" + ular.getVolume());
}
}