java继承细节

Java继承

java继承就是代码的复用,子类可以继承父类所有的属性和方法(意思就是说,包括私有的属性和方法也被继承了),但是不能直接访问私有的属性和方法。

1.如何使用父类私有的属性和方法

1.1使用setXXX、getXXX可以访问到父类中的属性

(1)父类

package com.mwx.test01;
public class test
{
	private int age;
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age=age;
	}
}

(2)子类,引用父类

package com.mwx.test01;
public class test_graduate extends test
{
	public void testing(){
		setAge(18);
		System.out.println(getAge());
	}
}

(3)在下面这个类中创建test_graduate类的对象

package com.mwx.test01;
public class test_student
{
	public static void main(String[] args)
	{
		test_graduate test_graduate=new test_graduate();
		test_graduate.testing();
		
	}
}

1.2利用父类中的公共方法来访问父类中的私有属性和方法

1.2.1 父类中创建一个print_()方法,子类中引用,可以获取父类中的私有属性

testint400()是一个父类私有方法,通过testing300()这个公共方法来使用父类中私有方法testing400().

package com.mwx.test01;
public class test
{
	public String name;
	private int age;
	public test()
	{
		System.out.println("父类的无参构造器");
	}
	public test(int age)
	{
		this.age=age;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age=age;
	}
	public void print_()
	{
		System.out.println(name+"的年龄为"+age);
	}
	private  void testint400(){
		System.out.println("这个是私有方法,在子类中无权访问");
	}
	public  void testing300(){
		System.out.println("通过父类中公共方法来方问父类中私有方法");
		testint400();
	}
}

2.子类必须要调用父类的构造器,完成父类的初始化

当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器

test为父类、test_graduate 为子类、test_student中实例化test_graduate

package com.mwx.test01;
public class test
{
	public String name;
	private int age;
	public test()
	{
		System.out.println("父类的无参构造器");
	}
}
package com.mwx.test01;
public class test_graduate extends test
{
	public void testing(){
	}
	public test_graduate()
	{
		//super(18);
		System.out.println("子类的无参构造器");
	}
}

package com.mwx.test01;
public class test_student
{
	public static void main(String[] args)
	{
		test_graduate test_graduate=new test_graduate();
		test_graduate.testing();
		
	}
}

结果如下

 可以看出,实例化对象的时候,先输出的是父类中的无参构造器,则说明,创建子类对象时,默认情况下总会去调用父类的无参构造器,如果父类中没有无参构造器,那么子类的构造器就将会报错

 这样的情况就需要我们使用super()去指定使用使用父类的哪个构造器来完成对父类的初始化工作。

package com.mwx.test01;
public class test
{
	public String name;
	private int age;
	public test(int age)
	{
		this.age=age;
	}
}
package com.mwx.test01;
public class test_graduate extends test
{
	public void testing(){
	}
	public test_graduate()
	{
		super(18);
		System.out.println("子类的无参构造器");
	}
}

注意:super()使用的时候必须放在构造器的第一行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值