1.0 继承
继承子类调用父类的方法,一般情况是不需要在子类中定义需要的类,而是直接调用父类的方法。
在继承的时候添加override注解,防止在不留心重载而非覆写了需要的方法。子类在调用父类的方法的时候一般是重写而不是重载。
而且在继承中,编译器会隐式的创建父类的构造器。如果父类没有定义默认构造器(无参构造器),则在子类中定义构造器的时候要加上super()来进行对应的构造器。
即子类只能默认调用父类的无参构造器,如果在子类中创建带参构造器而父类中没有无参构造器,则必须在子类的构造器下显示父类的带参构造器。、
E.G.:
class A{
public A( int i ){
}
public A(int i , int b ){
}
}
class B extends A{
public B( int i){
//如果不加super(i)则会报错,
}
public B( int i , int b,int c){
//super(i)或者super(b)都可以。2017.4.9(子类的构造器只能默认调用父类无参构造器,如果父类只有带参构造器则只能显示调用父类构造器。)
}
}
遗留问题:难道子类在创建的时候必须调用父类?为什么要这么设计呢?
2.0 组合
组合就是说在类中定义需要的类。(2017.4.9)
在网上看到有人比喻说继承就是老爸在家里帮我干了些活。而组合就是我在家里请了个老头帮我干活。
组合和继承都是在新的类中放置子对象(产生其他的对象),只不过组合是显式的进行创建,而继承则是隐性的创建。
3.0 代理
截止2017.4.9我在thinking in java 中看到的代理就是将需要的类(如某种工具类)显示的创建,然后在需要的类中将属性重写调用创建的类的方法或者属性。