1.java只允许单继承
2类可以继承1个抽象,但是内部必须实现
3类可以implmens多个接口,内部必须实现
4子类的构造方法可以通过super()调用父类的构造方法;
5可以安全地向上转型为更抽象的类型
6.
继承
Java使用extends关键字来实现继承
Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类
super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName
在Java中,任何class的构造方法,super第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();
注意:子类在调用父类时,要将super放在最前面.
class Person{
private String name;
private int age;
Person(String _name,int _age){
this.name=_name;
this.age=_age;
}
String getName(){return this.name;}
int getAge(){return this.age;}
}
class Student extends Person{
private int score;
public Student(String _name,int _age,int _score){
super(_name,_age);//调用的是父类的构造方法
this.score=_score;
}
}
向上转型
一个子类类型安全地变为父类类型的赋值,被称为向上转型(向上转型是安全的)
//父类指向子类 只能调用父类自己的方法 是安全的
Person p=new Student("sikui",25,100);
p.getName();
p.getAge();
向下转型
和向上转型相反,如果把一个父类类型强制转型为子类类型,就是向下转型(向下转型是不安全的)不能把父类变为子类,因为子类功能比父类多,多的功能无法凭空变出来。
向下转型这种方式是错误的,子类指向的方法是父类所没有的,子类的功能比父类多,多的方法无法凭空变出来
Student s=new Person("sikui",25);
s.getName();
s.getAge();
s.getScore();
为了避免向下转型出错,Java提供了instanceof操作符,可以先判断一个实例究竟是不是某种类型:
instanceof实际上判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。如果一个引用变量为null,那么对任何instanceof的判断都为false
Person p = new Person();
System.out.println(p instanceof Person); // true
System.out.println(p instanceof Student); // false
Student s = new Student();
System.out.println(s instanceof Person); // true
System.out.println(s instanceof Student); // true
组合
子类和父类的关系是is,has关系不能用继承。
class Student {
private int score;
private Book book;
public Student(int _score){
this.score=_score;
}
public void setBook(Book _book){
this.book=_book;
}
public int getScore(){
return score;
}
}
class Book {
private String book_name;
private int book_page;
public void init(){
System.out.println("初始化书");
}
public Book(String _name,int _page){
this.book_name=_name;
this.book_page=_page;
}
public String getBook_name(){
return this.book_name;
}
public int getBook_page(){
return this.book_page;
}
}
Student s=new Student(100);
Book book=new Book("语文",800);
s.setBook(book);//Student中包含book