pubilic class Person(){
int a
int b
int c
}
public class Student extend Person(){
}
继承了Person的属性,不用重新再写了,继承属性方法,private也继承 ,可拓展
java关于继承性的说明
1.一个类可以被多个类继承
2.一个类只能有一个父类
3.可以一个继承一个
方法重写
在继承方法之后,子类要改变父类的方法。
1.同方法名是否空参都得一模一样。
2.子类的权限修饰符不能小于父类的权限修饰符,如果父类是public 子类只能是public
3.子类不能重写父类是private的方法;父类是private 子类就不能完成重写
4.父类返回值类型是void,子类也之能是void。父类是A类型,子类可以是A类或A类的子类。如果是基本数据类型,重写返回值的子类必须是相同的类型
5.子类重写的异常大小必须小于父类被重写的异常大小。
6.static 不能重写
这两个构成重写
public Object s(){
return true;
}
public String s(){
return "HELLO";
}
这两个构成重写
public double s(){
return 0.0;
}
public double s(){
return 5;
}
继承性影响封装性
不同包下的普通类(非子类)要使用别的包的类,不可以调用private、缺省、protected的属性和方法。
如果继承了其他包的一个父类,就可以调用protected,还是不能调用缺省,private的属性和方法。
不同包的子类 new一个对象只能调用public的方法。
super关键字
当我们重写父类的方法的时候只能别的方法只能调用新的方法了,如果要使用原来没覆盖的方法就可以使用super关键字
1.super:理解为,父类的
2.格式:super.被重写的父类方法, 意思为调用父类的XXX,可以调用重写前的方法或者属性
3.注意点,对于属性来说,方法可以重写,属性不重写,如果出现父子类都有同类型 同名属性,this只调用子类的属性,super就调用父类的属性,这就是this和super的区别。this是现在自己类找,再往上找。super直接从父类找。
4.对于方法来说super调用父类,this调用重写以后的方法。
public class People{
public static void main(String[] args) {
jtext jt =new jtext();
jt.methodpublic();
}
}
public class Man {
private String name;
protected String think;
public String breath;
public Man ni;
public int k = 0;
public Man(){
}
public void methodpublic(){
}
private void methodprivate(){
}
protected void methodprotect(){
}
void dddefault(){
}
public Man ni(){
return ni;
}
}
import quan.Man;
public class jtext extends Man {
public int k =10;
public void method(){
super.methodpublic();
}
@Override
public void methodpublic() {
System.out.println(super.k);
System.out.println(this.k);
}
protected void methodprotect(){
breath ="我会呼吸";
}
}
5.super调用构造器
1.子类构造器调用父类构造器必须在第一行。方法中this 调用自己的构造器也必须在首行。
this和super只能二选一
super("nihao");
2.一个非常有意思的一个点,当父类只有一个有参构造器的时候,继承的子类必须也要造有参构造器,不然会报错
3.在子类构造器中没有super或this 会默认是super父类构造器,这样就造成输出的子类方法有涉及到父类构造器内容的变量会受影响,用这个可以解释第二点。
4.理解:在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器。
子类对象实例化过程(对于父子类调用属性、方法的具体解释)
1.从结果上来看,创建一个子类的对象。子类获取父类声明的可用的属性和方法。(图纸已经有了,创建了就造好了)
2.从过程上看,当我们创建子类的对象的时候,相当于使用了他的构造器,然后子类构造器必须要有默认的父类构造器这样才能获取到父类的可用的方法和属性,这就是为什么父类只有一个有参构造器的时候子类也必须有一个相同构造器,一直到Object的终极父类(这就是继承性的由来)。
明确:虽然调用了父类的构造器,但是还是只创建了一个new的对象。