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()使用的时候必须放在构造器的第一行.