继承(个人观点,若有不足,敬请指出)
1 什么是继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加“新”的数据或“新”的功能,也可以用父类的功能,但不能选择性地继承父类,只能继承“一个”。通过使用继承我们能够非常方便地“复用”以前的代码,能够大大的提高开发的效率。
2 继承特点
继承定义了类如何相互关联,共享特性。对于若干个相同或者相识的类,我们可以抽象出他们共有的行为或者属相并将其定义成一个父类或者超类,然后用这些类继承该父类,他们不仅可以拥有父类的属性、方法还可以定义自己独有的属性或者方法。
同时在使用继承时需要记住三句话:
1、子类拥有父类非private的属性和方法。
2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法(重写)。
综上所述,使用继承确实有许多的优点,除了将所有子类的共同属性放入父类,实现代码共享,避免重复外,还可以使得修改扩展继承而来的实现比较简单。
3 构造器
对于继承而已,子类会默认调用父类的构造器,但是如果没有默认的父类构造器(无参构造器),子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。
public class A {
public A(String a){
System.out.println("a");
}
}
public class B extends A{
public B(){
super("a");
System.out.println("B");
}
public B(String B){
super("a");
System.out.println("B1");
}
public static void main(String[] args){
B b = new B();
B b1 = new B("b");
}
}
=》
a
B
a
B1
4 protected关键字
private访问修饰符,对于封装而言,是最好的选择,但这个只是基于理想的世界,有时候我们需要这样的需求:我们需要将某些事物尽可能地”对这个世界隐藏,但是仍然允许子类的成员来访问“它们。这个时候就需要使用到protected。
对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。
诚然尽管可以使用protected访问修饰符来限制父类属性和方法的访问权限,但是最好的方式还是将属性保持为private(我们应当一致保留更改底层实现),通过protected方法来控制类的继承者的访问权限。
5 继承的缺点
首先我们需要明确,继承存在如下缺陷:
1、父类变,子类就必须变。
2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
3、继承是一种强耦合关系。