extend
代码示例:
class Book {
String name;
double price;
String author;
Book(String name, double price, String author) {
this.name = name;
this.price = price;
this.author = author;
}
// 默认的构造方法,当子类不继承父类的构造方法时,父类需要有这样的构造方法
Book(){}
void show() {
System.out.println("书名:" + this.name);
System.out.println("定价:" + price);
System.out.println("作者:" + author);
}
public static void main(String args[]) {
Combook book1 = new Combook("简爱", 20, "aobote", true);
book1.show();
System.out.println(book1.name);
System.out.println(book1 instanceof Book);
System.out.println(book1 instanceof Combook);
Book book = (Book) book1;
System.out.println(book.name);
Combook combook = (Combook) book;
System.out.println(combook.name);
}
}
class Combook extends Book {
boolean hasDisp = true;
// 子类重写父类的属性
String name = "koala";
Combook(String name, double price, String author, boolean hasDisp) {
super(name, price, author);
this.hasDisp = hasDisp;
}
@Override
void show() {
super.show();
System.out.println("是否有光盘?" + hasDisp);
System.out.println("1" + name);
System.out.println("2" + this.name);
System.out.println("3" + super.name);
}
}
输出结果:
书名:简爱
定价:20.0
作者:aobote
是否有光盘?true
1koala
2koala
3简爱
koala
true
true
简爱
koala
Process finished with exit code 0
可见:
1 子类可以继承父类的属性和方法,子类也可以重写父类的属性和方法,实现子类的特殊性;
2 通过super(父类构造方法参数集),可直接继承父类的构造方法,但不同于将父类的构造方法挪到子类,因为super()不会改变子类的属性值。
3 super关键字用于调用父类对象的属性和方法,this关键字用于调用子类当前对象的属性和方法。当子类重新定义了父类的属性时,如name,且子类构造方法继承父类的构造方法,则重写的属性遵从父类构造方法对该属性的处理,new一个子类对象时,该对象的属性继承父类的属性值,若需使用子类的属性值,则需在子类的构造方法内进行处理。
4 子类和父类对象可以互相强制转型,当子类转为父类,将丢失子类对象的特殊性,同样的当父类对象转为子类对象,属性值会变为子类重写的属性值,具有子类的特殊性。
5 子类必须要继承父类至少一个构造方法,如不想继承,需要在父类添加默认的构造方法Book(){}。