一、继承的概念
继承是OOP(面向对象)的特征之一,它是从已有的类(父类或称超类)中派生出新的类(子类),子类会自动拥有父类的属性和方法,并且之类可以扩展新的属性和方法。
二、为什么使用继承
这是两张UML图,对于这两个不同的类存在大量代码的重复,继承就是为了减少代码量,将重复代码抽取到父类中。使用继承优化设计后:
将公共的一些属性和方法提取到父类中,每一个子类只需要编写子类中与父类不同的属性和方法;子类其余相同的属性和方法可以通过继承父类获得。
三、如何使用继承
在java中,使用继承需要使用extends关键字,并且每个子类只能继承一个父类(单根继承)
1.语法形式
//编写父类
class 父类类名
{
//子类公共的属性和方法
}
class 子类类名1 extends 父类类名 //子类1继承父类
{
//子类1特有的属性和方法
}
class 子类类名2 extends 父类类名
{
//子类2特有的属性和方法
}
2.实例
//Animal.java
public class Animal
{
String name;
int age;
void eat()
{
System.out.println("eat");
}
}
//子类会继承父类的属性和方法
//Dog.java
public class Dog extends Animal
{
String food;
void sleep()
{
System.out.println("sleep");
}
}
//Cat.java
public class Cat extends Animal
{
String health;
void play()
{
System.out.println("play");
}
}
//Test.java
public class Test
{
public static void main(String[] args)
{
Dog dog = new Dog();
dog.name = "阿黄"
dog.age = 10;
dog.eat();
}
}
分析:在Dog类中并没有声明name,age以及方法eat(),但在Test.java中,实例dog可以调用父类属性name,age以及调用父类方法eat(),这是因为Dog类继承了父类Animal的属性和方法
3.注意事项
有些父类的属性和方法是不能被继承的:
- private属性和方法
- 子类与父类不在同包时,使用默认(default)访问权限的属性和方法
- 构造方法
- 被static修饰的属性和方法
四、何时使用继承
1.继承与真实世界相似,符合is-a关系的设计就需要使用继承
- 哈士奇是狗(哈士奇是子类,狗是父类)
- 妈妈也是女人(妈妈是子类,女人是父类)
2.继承是代码复用的一种方式,所以当子类中有重复的属性和方法,就应该构建父类,将这些重复的代码放进父类中