【继承的好处】
1.提高了代码的复用性
2.让类与类之间产生了 关系,给第三个特征多态提供了前提
java中支持单继承。不支持多继承,但对c++中的多继承机制进行改良。
不支持多继承,是因为多个父类中有相同成员,会产生调用不确定性
【成员变量】
子类可以直接使用父类的变量
当本类成员和局部变量同名用this区分
当子类中的成员变量同名 用super:代表父类
class Fu{
int num=5;
}
class Zi extends Fu{
int num;
System.out.println(this.num+"..."+super.num);
}
super不代表父类,代表一个父类的空间
【什么时候写继承】
继承应该是当类与类之间存在着共同点时,把相同的抽取出来形成继承关系
,而不是为了拿别人的东西而继承。
如:
class test1{
void show1();
void show2();
}
class test2{
void show1();
void show3();
}
不能因为test2与test1有相同的show1();而从test2继承test1,把show1();抽取出来。
class fu{
void show1();
}
class test1 extends fu{
void show2();
}
class test2 extends fu{
void show3();
}
【继承关系内存】
内存中会先加载父类的构造函数
子类中不能直接访问父类中的私有内容
private Fu{
private int num=4
}
【成员函数】
当子父类中出现成员函数一模一样的情况,会运行子类的函数。
这种现象,成为覆盖操作。这是函数在子类中的特性。
函数两个特性:
1.重载。同一个类中。overload
2.覆盖。子类中。覆盖也称为重写,复写。override
class Fu{
void show(){
System.out.println("fu show run");
}
class zi extends Fu{
void show(){
System.out.println("zi show run");
}
}
}
Zi zi=new Zi();
zi.show();
打印的是 zi show run
覆盖注意事项:
1.子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。
如:
例子1:
父类中:public void show();
子类中:void show();这是不行的
例子2:
父类中:private void show();
子类中:public void show();
这种情况就不是覆盖
2.静态只能覆盖静态,或被静态覆盖
如:
父类中:
public static void show(){}
子类中也必须
public static void show(){}
才能覆盖
【什么时候使用覆盖操作】
当一个类进行子类的扩展时,子类需要保留父类的功能声明,
但是要定义子类中该功能的特有内容时,就使用覆盖操作完成
class honeP{
void call(){}
void show(){}
}
class NewPhone extends Phone{
void show(){
System.out.println("name");
super.show();
}
}
1.提高了代码的复用性
2.让类与类之间产生了 关系,给第三个特征多态提供了前提
java中支持单继承。不支持多继承,但对c++中的多继承机制进行改良。
不支持多继承,是因为多个父类中有相同成员,会产生调用不确定性
【成员变量】
子类可以直接使用父类的变量
当本类成员和局部变量同名用this区分
当子类中的成员变量同名 用super:代表父类
class Fu{
int num=5;
}
class Zi extends Fu{
int num;
System.out.println(this.num+"..."+super.num);
}
super不代表父类,代表一个父类的空间
【什么时候写继承】
继承应该是当类与类之间存在着共同点时,把相同的抽取出来形成继承关系
,而不是为了拿别人的东西而继承。
如:
class test1{
void show1();
void show2();
}
class test2{
void show1();
void show3();
}
不能因为test2与test1有相同的show1();而从test2继承test1,把show1();抽取出来。
class fu{
void show1();
}
class test1 extends fu{
void show2();
}
class test2 extends fu{
void show3();
}
【继承关系内存】
内存中会先加载父类的构造函数
子类中不能直接访问父类中的私有内容
private Fu{
private int num=4
}
【成员函数】
当子父类中出现成员函数一模一样的情况,会运行子类的函数。
这种现象,成为覆盖操作。这是函数在子类中的特性。
函数两个特性:
1.重载。同一个类中。overload
2.覆盖。子类中。覆盖也称为重写,复写。override
class Fu{
void show(){
System.out.println("fu show run");
}
class zi extends Fu{
void show(){
System.out.println("zi show run");
}
}
}
Zi zi=new Zi();
zi.show();
打印的是 zi show run
覆盖注意事项:
1.子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。
如:
例子1:
父类中:public void show();
子类中:void show();这是不行的
例子2:
父类中:private void show();
子类中:public void show();
这种情况就不是覆盖
2.静态只能覆盖静态,或被静态覆盖
如:
父类中:
public static void show(){}
子类中也必须
public static void show(){}
才能覆盖
【什么时候使用覆盖操作】
当一个类进行子类的扩展时,子类需要保留父类的功能声明,
但是要定义子类中该功能的特有内容时,就使用覆盖操作完成
class honeP{
void call(){}
void show(){}
}
class NewPhone extends Phone{
void show(){
System.out.println("name");
super.show();
}
}