java的继承性
作者:互联网
java的继承性
本文选自尚硅谷
java继承性用法
- 继承性的用法为class A extends B{},其中A为子类,B为父类
- 继承性的优点是能够减小代码的冗余
- 子类能够继承父类的属性和方法,但是不能继承父类属性的初始化值
代码如下,先创建一个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
父类的私有属性和方法都被调用了,可见继承性是可以继承父类的私有属性和方法的,只不过受封装性的影响,必须通过父类的公用方法来调用。
继承性的特征
- 一个子类只能有一个父类
- 一个父类可以派生多个子类
- 假如说有A,B,C,D四个类,A继承于B,B继承于C,C继承于D,则B是A的直接父类,C和D是A的间接父类
- 在类的定义那一行语句按住ctrl+t能够看间类的继承目录,所有类(出了object类本身)都继承于java.lang.Object类,也能使用Object类的方法。
标签:java,name,age,eat,Person,继承性,父类,public 来源: https://blog.csdn.net/Meloneating/article/details/113635492