子父类出现后,类成员的特点:
类中的成员:
1.变量
如果子类中出现非私有的同名成员变量时
、 子类访问本类变量用this,访问父类变量用super
class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
void show(){
System.out.println(super.num); //关键字super:引用父类对象
}
}
class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
//输出结果为4
2.函数
当子类和父类出现一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容
这种是函数的另一个特性:重写(覆盖)
当子类继承父类,沿袭了父类的功能到子类中,
但是子类虽具备该功能,但功能的内容却和父类不一致,
这时没有必要定义新功能,而使用覆盖特性,保留父类的功能定义
并重写功能内容
class Fu{
void show(){
System.out.println("我是你爸爸");
}
void speak(){
System.out.println("VB");
}
}
class Zi extends Fu{
void show(){
System.out.println("我没你这儿子");
}
void speak(){
System.out.println("JAVA");
}
}
class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
z.show();
z.speak();
}
}
该特性可用于更新、扩写功能
class ExtendsDemo2{
public static void main(String[] args){
newTel t=new newTel();
t.show();
}
}
class Tel{
void show(){
System.out.println("number");
}
}
class newTel extends Tel{
void show(){
super.show();
System.out.println("name");
System.out.println("pic");
}
}
**子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败
静态只能覆盖静态
与重载的区别
重载:只看同名函数参数列表
重写:子父类方法一模一样
3.构造函数
在对子类对象进行初始化时,父类的构造函数也会运行,
那是因为子类的构造函数默认第一行有一条隐藏的语句super( );
super():会访问父类中的空参数的构造函数 而且是子类中所有的构造函数的默认第一行
class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
Zi z1=new Zi(4);
}
}
class Fu{
Fu(){
System.out.println("fu run");
}
}
class Zi extends Fu{
Zi(){
System.out.println("zi run");
}
Zi(int x){
System.out.println("zi..."+x);
}
}
/*输出结果为
fu run
zi run
fu run
zi...4
*/
如果父类没有空参数,则必须在子类中指明访问对象:super(参数)
为什么子类一定访问父类的构造函数:
因为父类中的数据 子类可以直接获取,
所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定函数,可以通过super语句指定(super语句必须写在第一行与this() 不能共存)
**子类的实例化过程:
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数内的第一行都有一句隐藏的super();
当父类中没有空参数的构造函数时,子类必须通过super或this语句来指定要访问的函数
子类的构造函数也可以手动指定this语句来访问本类中的构造函数
子类中至少会有一个构造函数来访问父类中的构造函数
class Person1{
private String name;
Person1(String name){
this.name=name;
}
}
class Student1 extends Person1{
Student1(String name){
super(name);
}
void method(){
super.show();
}
}