JAVA学习日志(7-2-子父类中成员的特点)

子父类出现后,类成员的特点:

    类中的成员:

        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();
	}
}

 

转载于:https://my.oschina.net/Almon/blog/714744

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>