13.继承

1.继承的概念:一个类从已有类那里获得其已有属性和方法,这种现象叫做类的继承,新类称为子类或者派生类,已有类叫做父类或者基类
2.继承的好处:1.代码可以重复使用 2.形成一种类的结构体系(可以很容易形成类族) 3.为多态创造条件
3.继承的实现方式: subClass extend SuperClass
利用继承可以很好的模拟现实事物之间的关系,如图:
13.继承
eg:
public calss Human{
public String name="张三";
public int age=10;
}
public class Student extend Human {
public double score=99.00;
}
public class Teacher extend Student{
public String name="李四";
}
public class ExtendTest{
public static void main(String[] args){
Teacher t=new Teacher();
System.out.Printf("%s %f\n",t.age,t.score); //输出年龄10,输出成绩99.00
}
}

子类可以访问父类非私有的成员,私有成员无法被子类方法访问,通过子类对象名只能访问从父类继承过来的非私有成员,私有物理上已经继承过来了,只是不能访问,因此继承要慎重,否则浪费内存

继承的原则:只有B是A的一种则可以被继承
eg
/*
2009年5月31日14:59:26
本程序证明了:
1、 子类内部可以访问父类非私有的成员
私有成员无法被子类方法访问
2、 通过子类对象名只能访问从父类继承过来的非私有成员
总结:
私有不能被继承
私有物理上已经被继承过来,只不过逻辑上程序员不能去访问它
因此继承必须慎重,否则会浪费内存
*/

class A
{
public int i;
protected int j;
private int k;
public void g()
{
}
private void s()
{
}
protected void b()
{
}
}
class B extends A
{
private void m()
{
i = 10;
j = 20;
//k = 30; //error 私有属性不能被继承
g();
b();
//s(); // error 私有方法不能被继承
}
public void f()
{
i = 10;
j = 20;
//k = 30; //error 私有属性不能被继承
g();
b();
//s(); // error 私有方法不能被继承
}
}
class M
{
public static void main(String[] args)
{
B bb = new B();
bb.i = 20;
bb.j = 30;
bb.b();
bb.g();
//bb.s(); //error
//bb.k = 22;
}
}
子类成员访问父类成员的三种方式
a。在子类内部访问父类成员
b。通过子类对象名访问父类成员
c。通过子类的类名访问父类成员

13.继承
java类与类之前 包含、使用、一般到特殊
java 只支持单继承,不支持多继承,如果支持多继承,会造成钻石环问题,如图,A4会继承A2和A3的id,这样会产生两个id
13.继承
子类不能继承父类的构造函数,在子类中使用super来调用父类的构造方法
super只能用于父类中的构造函数中的属性的继承,super语句要放在第一位,如果不写super会默认调用无参数的构造函数。super不能用于普通的方法,一个super中只能有一个构造函数

重写父类方法:
指在子类中重新定义父类中已经有的方法
重写方法和被重写方法必须具有相同的方法名称、参数列表和返回值类型
子类中不允许出现与父类中返回值类型不同的方法,如果出现会编译失败,因为调用的时候不知道调用的是哪个方法
重写方法时,不能使用比父类中被重写方法更严格的访问权限