编程语言
首页 > 编程语言> > java的继承性

java的继承性

作者:互联网

java的继承性


本文选自尚硅谷

java继承性用法

代码如下,先创建一个Person类

package com.atguigu.java;

public class Person {
	String name;
	int age;
	
	public Person(){
		
	}
	
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	public void eat(){
		System.out.println("eat");
	}
	
	public void sleep(){
		System.out.println("sleep");
	}
}

然后创建一个Studeng类

package com.atguigu.java;

public class Student extends Person{
//	String name;
//	int age;
	String major;
	
	public Student(){
		
	}
	
	public Student(String name,int age,String major){
		this.name = name;
		this.age = age;
		this.major = major;
	}
	
//	public void eat(){
//		System.out.println("eat");
//	}
//	
//	public void sleep(){
//		System.out.println("sleep");
//	}
//	
	public void study(){
		System.out.println("study");
	}
}

在Student类中,所有加上注释的都是可以省略掉的部分,因为Student类继承了Person类,故也拥有了Person类的全部属性和方法,就不必自己再敲一遍和Person类同样的代码了。
测试代码如下,创建一个ExtendsTest类

package com.atguigu.java;

public class ExtendsTest {
	public static void main(String[] args) {
		Person p1 = new Person("xiaoxiao",12);
		p1.eat();
		p1.age = 18;
		
		Student s1 = new Student();
		s1.eat();
		System.out.println(s1.name+" "+s1.age);
		s1.name = "xiaoming";
		System.out.println(s1.name);
				
	}
}

运行结果为:

eat
eat
null 0
xiaoming

可以看出,在 Student类中没有定义eat()方法,但由于Student类继承了父类的eat()方法,因此也有了eat()方法。且在父类给属性初始化的值,是无法传递到子类的。

继承性与封装性的交互

假如将Person类中的age设为private,把sleep方法也设为private,子类在继承父类的时候,其实仍然继承了父类私有的方法和属性,只不过不能够在子类中直接调用父类的私有方法和属性了,因为封装性的影响,必须通过父类提供的外部接口调用父类的私有属性和方法,换句话说,把父类私有属性和方法放到父类的公用方法中,通过调用父类的公用方法从而获取父类的私有属性和方法。
代码如下

package com.atguigu.java;

public class Person {
	String name;
	private int age;
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Person(){
		
	}
	
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	public void eat(){
		System.out.println("eat");
		sleep();
	}
	
	private void sleep(){
		System.out.println("sleep");
	}
}

把Person类的age属性设为私有,就得设置getAge和setAge的公用方法,把sleep方法设为私有,就把sleep方法放入公有的eat方法内部,同样可以用sleep方法。

package com.atguigu.java;

public class Student extends Person{
//	String name;
//	int age;
	String major;
	
	public Student(){
		
	}
	
	public Student(String name,int age,String major){
		this.name = name;
//		this.age = age;
		setAge(age);
		this.major = major;
	}
	
	public void study(){
		System.out.println("study");
	}
	
	public void show(){
		System.out.println("name = "+name+",age = "+ getAge()+"major = "+major);
	}
}

Student类是子类,也要有相应的更改,不能直接调用私有属性了,必须通过父类的公用方法调用。

package com.atguigu.java;

public class ExtendsTest {
	public static void main(String[] args) {
		
		Student s1 = new Student("xiaoming",18,"automation");
		s1.eat();
//		s1.sleep();
		s1.show();	
	}
}

运行结果如下

eat
sleep
name = xiaoming,age = 18major = automation

父类的私有属性和方法都被调用了,可见继承性是可以继承父类的私有属性和方法的,只不过受封装性的影响,必须通过父类的公用方法来调用。

继承性的特征

标签:java,name,age,eat,Person,继承性,父类,public
来源: https://blog.csdn.net/Meloneating/article/details/113635492