文章目录
一、继承的概念
Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,现实世界错误复杂,事物之间可能会存在一些联系,比如:狗和猫,它们都是一个动物。
按我们之前学到,猫和狗有一些相同的动物属性,代码写起来就比较冗余,所以引出继承。
继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。
继承最大的意义:对代码可以进行复用。
子类 extends 父类:is-a 的关系
二、继承的语法
修饰符 class 子类 extends 父类 {
// …
}
// Animal.java
public class Animal{
String name;
int age;
public void eat(){
System.out.println(name + "正在吃饭");
}
public void sleep(){
System.out.println(name + "正在睡觉");
}
}
// Dog.java
public class Dog extends Animal{
void bark(){
System.out.println(name + "汪汪汪~~~");
}
// Cat.Java
public class Cat extends Animal{
void mew(){
System.out.println(name + "喵喵喵~~~");
}
}
// TestExtend.java
public class TestExtend {
public static void main(String[] args) {
Dog dog = new Dog();
// dog类中并没有定义任何成员变量,name和age属 性肯定是从父类Animal中继承下来的
System.out.println(dog.name);
System.out.println(dog.age);
// dog访问的eat()和sleep()方法也是从Animal中继承下来的
dog.eat();
dog.sleep();
dog.bark();
}
}
注意:
- 子类会将父类中的成员变量或者成员方法继承到子类中;
- 子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了。
三、父类成员访问
1.子类中访问父类的成员变量
(1)子类和父类不存在同名成员变量
子类又有,就拿子类的;子类没有,就拿父类的。
//父类
public class Base {
int a;
int b;
}
//子类
public class Derived extends Base{
int c;
public void method(){
a = 10; // 访问从父类中继承下来的a
b = 20; // 访问从父类中继承下来的b
c = 30; // 访问子类自己的c
}
}
(2)子类和父类成员变量同名
如果父类和子类有重名的成员变量,优先使用子类的(就近原则)。
//父类
public class Base {
int a = 1;
int b = 2;
int c = 3;
}
//子类
public class Derived extends Base{
int a; // 与父类中成员a同名,且类型相同
char b; // 与父类中成员b同名,但类型不同
public void method(){
a = 100; // 访问子类自己新增的a
b = 101; // 访问子类自己新增的b
c = 102; // 子类没有c,访问的肯定是从父类继承下来的c
// d = 103; // 编译失败,因为父类和子类都没有定义成员变量b
super