我们了解到,面向对象的基本特性有封装、继承和多态。面向对象中,类是将所有共性的东西封装。我们考虑一种场景,自然界里面有动物,动物里面有熊、老虎、鸭等等,他们有一些共性的东西,有毛色、有雌雄、能够吃饭、喝水等等。
这些共性的东西如果放在类里面,是不是在定义每个动物的时候,都需要重写一遍呢?这个时候我们可以将共性的东西抽取出来,变成一个父类,让一些子类来继承,这样就不需要进行重复定义动物的属性或者方法来,只需要在子类里面进行定义就可以了。
Java 语言 的继承只能够是单继承,不能够多继承。继承的子类有的时候也会被叫为父类的派生类。
class 父类{} //定义一个父类
class 子类 extends 父类{} //子类继承父类
参数 | 说明 |
---|---|
父类 | 定义一个类,和定义普通的类一样 |
子类 | 定义一个类,和定义普通的类一样 |
extends | 继承用到的关键字 |
定义类的时候,和定义普通类一样,普通类的定义 中,我们类里面有属性和方法。继承的话,必须要有两个类,子类和父类。
我们定义一个父类 Fathcer.java
package com.haicoder.net.extend;
public class FatherClass {
//名字
private String name;
//年龄
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void info(){
System.out.println("name : " + this.name + " age : " + this.age);
}
}
定义一个子类 ChildClass.java
package com.haicoder.net.extend;
public class ChildClass extends FatherClass {
private String ownerProperty;
public String getOwnerProperty() {
return ownerProperty;
}
public void setOwnerProperty(String ownerProperty) {
this.ownerProperty = ownerProperty;
}
}
调用子类测试类
package com.haicoder.net.extend;
public class TestMain {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
ChildClass childClass = new ChildClass();
childClass.setName("嗨客");
childClass.setAge(21);
childClass.info();
}
}
运行结果如下:
在运行结果中,我们看到,我们子类没有定义父类中的任何属性,但是在测试类里面,我们定义了一个子类的对象,然后调用了父类里面是 public 类型的方法,比如 setName,setAge 和 info 方法,子类中都可以使用。
在 Java 语言中,继承是单继承的,也就说一个子类只能够继承一个父类,而一个父类可以有多个子类。比如定义一个父类 A。有两个子类 B 和 C。那么 B 可以继承 A,C 也可以继承 A。这个时候 A 是 B 和 C 的父类,而 B 和 C 只能够有 A 一个父类。
子类可以使用父类中的 拥有权限 的属性和方法。它不能够直接访问父类中的 private 定义的属性和方法。只能够通过父类提供的其他操作来访问私有的属性或者方法。