# 三、继承
子类继承父类,所有非私有的属性和方法(不包含构造器和主方法)
Java只能单一继承,一个类只能有一个父类(可以通过多重继承来实现多继承)
(所有的类都直接或间接继承了Object,Object万类之祖)
**动物继承案例1**
Animal
```java
/**
* 动物类
* 名字、吃的方法
*/
public abstract class Animal {
private String name;
/**
* 不明确是什么动物?吃的东西也不明确
*/
public abstract void eat();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
Cat
```java
/**
* 猫类
* 继承动物类的属性和行为
*/
public class Cat extends Animal{
/**
* 猫吃鱼
*/
@Override
public void eat() {
System.out.println(super.getName()+"吃鱼");
}
}
```
Dog
```java
/**
* 狗类
* 共有属性和行为直接从动物类继承
*/
public class Dog extends Animal{
/**
* 重写了父类的方法
* 由于父类方法不满足使用,根据子类的特性进行重写
*/
@Override
public void eat() {
System.out.println(super.getName()+"啃骨头");
}
}
```
测试类
```java
/**
* 继承
* Aniaml
* 子类:Dog Cat
*/
public class Test {
public static void main(String[] args) {
//创建Dog类对象
Dog dog = new Dog();
dog.setName("旺财");
dog.eat();
//创建猫类对象
Cat cat = new Cat();
cat.setName("花花");
cat.eat();
}
}
```
**接口:为了弥补类只能单一继承的缺陷,后来演变为一种接口规范**
拍摄接口 打电话接口
数码相机 拍照手机 固定电话
------------------------------------------------------------
给动物都添加一个功能:跳高 Jump()
定义一个Jump接口,所有需要的这个功能的,都实现这个接口
```java
/**
* 接口
* 接口内只能有静态常量
* public static final 默认修饰符
* 接口内的方法都是抽象方法
* public abstract 默认修饰符
*/
public interface Jump {
void jump();
}
```
```java
/**
* 猫类
* 继承动物类的属性和行为
*/
public class Cat extends Animal implements Jump{
/**
* 猫吃鱼
*/
@Override
public void eat() {
System.out.println(super.getName()+"吃鱼");
}
@Override
public void jump() {
System.out.println(super.getName()+"像猫跳一样在跳高!!!");
}
}
```
```java
/**
* 狗类
* 共有属性和行为直接从动物类继承
*/
public class Dog extends Animal implements Jump{
/**
* 重写了父类的方法
* 由于父类方法不满足使用,根据子类的特性进行重写
*/
@Override
public void eat() {
System.out.println(super.getName()+"啃骨头");
}
@Override
public void jump() {
System.out.println(super.getName()+"像狗跳一样在跳高!!!");
}
}
```
```java
/**
* 继承
* Aniaml
* 子类:Dog Cat
*/
public class Test {
public static void main(String[] args) {
//创建Dog类对象
Dog dog = new Dog();
dog.setName("旺财");
dog.eat();
dog.jump();
//创建猫类对象
Cat cat = new Cat();
cat.setName("花花");
cat.eat();
cat.jump();
}
}
```
**多态的案例**
概念:
多态=多种形态=多种类型
水:固态类型、液态类型、气态类型
人的身份:学生类型、警察类型、医生类型、狗
汽车人:汽车、机器人
Dog继承了Animal,这个dog对象,我们可以说你是Dog,也可以说你是Animal
然后dog就拥有多种类型=多种形态=多态
狗:狗类型、动物类型、生物类型
先继承,才有多态
**什么是多态的使用?**
把不同的子类对象都当作共同的父类来看,屏蔽了子类之间直接的差异
可以设计通用的编程,大大提高代码的重用性
**饲养员案例描述多态的使用:**
饲养员喂狗和猫,有什么共性:
内部类:类中定义类,web中用的不多,主要是JavaGUI中使用较多,感兴趣自行了解