java基础
**
Java面向对象之继承
**
上一篇博客中介绍了面向对象之封装,此篇博客则简单来看看这个继承。
这个继承这个词,乍一听可能想到的就是继承财产(手动滑稽)。Java里的继承又是什么情况呢,我们来看看。
继承:
我们继承同样是应用到类上,关键词:extends、super
extends:用于类继承
class 子类名 exdents 父类名{}
//父类
public class Parents {
private String name;
protected Car car;
public String article;
}
//子类
public class Son extends Parents {
private String a;
public Son(Car car,String artocle){
super();
this.car = car;
this.article = article;
// this.name = name; 由封装性我们知道name(private)无法继承
}
}
结合我们类的封装性
父类的非private属性我们可以直接使用
super是干什么用的?
继承后还有什么是子类可以用的?
对了,说super之前继承的一些注意点都忘了
注意:
一个子类只能继承一个类
class One extends Two,Three{} 错误的用法
但一个父类却能被几个类继承
class One{}
class Two extends One{}
class Three extends One{}
同样分层继承也是没有问题的
class One{}
class Two extends One{}
class Three extends Two{}
super:调用父类继承得到的实例变量或方法
public class Parents {
private String name;
protected Car car;
public String article;
public void talk(){
System.out.println("Parents is talking");
}
}
public class Son extends Parents {
private String a;
public Son(Car car,String article){
super.talk();
super.car = car;
super.article = article;
}
}
我们看看子类用super能点出来什么
注意:
1、我们使用super可以点出来父类的变量方法进行使用
2、使用super();是调用了父类的构造方法(有参则调用父类有参构造、无参则调用无参)。
3、使用super();在子类的构造方法第一行,其他位置则报错。
4、super不能出现在static块、方法内。(同this)
我们可以看出,使用继承后,父类的非private权限的相应属性和方法我们都可以在子类调用。
特点:
1、提高了类与类之间的联系。
2、提高了代码的复用性
3、提高了代码的维护性
3、增加了耦合性(缺点)
我们OOP思想的原则是“高内聚、低耦合”
最后:我们对父子类相关东西玩一玩。
class A{
int id;
String name;
public A(){
}
public A(int id,String name) {
this.id = id;
this.name = name;
}
}
class B extends A{
String sex;
public B(){
}
public B(int id,String name,String sex){
super();
this.sex = sex;
}
}
public class Test {
public static void main(String[] args) {
A a = new A();
A a1 = new A(1,"zs");
A a2 = new B();
A a3 = new B(1,"zs","nan");
B b = new B();
B b1 = new B(2,"ls","nan");
// B b2 = (B) new A(); //运行报错 父类不能实例化子类对象
// B b3 = (B) new A(3,"ww");
// B b4 = (B) new A(3,"da","nan"); 编译报错
}
}
我们从上面的创建实例化对象时,对于new自身类的情况就不用说了,构造怎么写就是什么。(如a,a1,b,b1)
a2和a3对象,我们发现,用子类去实例化(new)父类对象时,我们可以用父类和子类的所有(非private)属性。
b2、b3和b4对象,我们发现,运行时会发生如下异常
它不允许父类去实例化子类对象。但是子类实例化父类对象是我们之后将经常使用的方式。
由此我们知道,子类拥有父类和自身的非private属性,至于父子类其他东西,请戳下一篇!!!
上一篇 》
面向对象——封装
下一篇 》
方法重写与重载