面向对象编程的三大特征:封装、继承与多态。
所谓继承就是指人们可以基于已存在的类构造一个新类。继承已存在的类就是复用这些类的方法(method)和数据域(field)。
在此基础上,可以添加属于子类的新的方法和数据域,以满足新的需求。继承存在明显的“is a”的关系。
/**
* Created by N3verL4nd on 2016/11/10.
*/
class Father{
private String name;
Father(){
name = "";
}
Father(String name){
this.name = name;
}
public String getName() {
return name;
}
}
class Son extends Father{
private String no;
Son(){
super();
no = "";
}
Son(String name, String no){
super(name);
this.no = no;
}
public String getNo() {
return no;
}
}
public class HelloWorld {
public static void main(String[] args) {
Father father = new Father("father");
Son son = new Son("son", "10010");
System.out.println("father: " + father.getName());
System.out.println("son: " + son.getName() + " no:" + son.getNo());
}
}
在JAVA中,所有的继承都是公有继承。
已存在的类叫做:超类、基类或者父类。由父类继承得到的叫做:子类、派生类或者孩子类。
尽管Father类是一个超类,但是并不是说它拥有比子类更多的功能。相反,子类比超类拥有的功能更加丰富。
Son类继承了Father的name数据域与getName方法。虽然Son类继承了Father的name属性,但是在Faher类内不能直接访问(private)。
只有Father类的getName方法才可以访问。如果子类重写了getName方法,而又想访问父类的getName方法,则用super关键字访问。
super的另一个用途:super()调用父类的构造函数。
super与this的区别:
this是一个对象的引用(son.getName() --> getName(Son this));super只是一个指示编译器调用超类方法的特殊关键字。
在子类中只可以增加域和方法,不能删除继承来的域和方法。
由于Son类的构造器不能访问Father类的私有域,所以只能通过调用Father类的构造器对这部分数据进行初始化。可以使用super关键字调用父类的构造函数,而且必须是子类构造器的第一条语句。
Intellij果然是个牛逼的IDE。
this的两个作用:
1、引用隐私参数;2、调用该类的其他构造器。
super的两个作用:
1、调用超类的方法;2、调用超类的构造器。
调用构造器时,两者都必须作为第一条语句出现。
JAVA不支持多继承。
在JAVA程序设计语言中,对象变量是多态的。Father变量既可以引用一个Father类对象,
亦可以引用一个Son类对象。在java中,动态绑定是默认的处理方式。
子类对象可以赋值给父类变量,但是父类对象不能赋值给子类变量。