多态(重点)
在生活中我们说:
水 在不同的温度下 有不同的状态和形态
汽车: 跑车 卡车 小轿车 渣土车 油罐车 叉车.....
汽车 = 跑车
汽车 = 卡丁车
在java中怎么去体现多态呢?
a. 必须有继承关系
b. 父类的引用指向子类的实例化对象。
c. 多态的使用前提是 必须有方法的重写。
所以在多态中,父类引用调用方法的时候调用的是子类重写以后的方法。
d.多态只能调用父类或者子类重写父类的方法 ,不能调用子类特有的方法,
抽象:abstract 抽象
为什么我们要用abstract抽象
为了简化代码的书写
抽象方法
- 用abstract修饰的方法,此方法只能存在于被abstract修饰的类中
抽象类
-
用abstract修饰的类
-
因为这是一个类,所以它存在,属性,方法,构造器。并且它还可能存在抽象方法
**注意:**抽象类需要被实现(重写其中的抽象方法)
package com.xdkj.javase.oop06;
/**1. abstract 抽象
* 2. 抽象的方法就是只有方法的声明 没有方法体(方法的实现)
* 3. 有抽象方法的类必须是抽象类
* 4. 抽象类中不一定有抽象方法 也可以有普通的方法
* 5. 抽象类中的抽象方法在子类中必须进行重写 普通也可以进行重写
* 6. 抽象类不能实例化对象
* 7. 抽象类有构造器 并且是为了子类实例化对象来使用的,自己不能实例化对象
* 8. 抽象类有属性可以是变量 也可以是常量
* 9. 抽象类可以有静态的 成员属性和行为 通过类名调用(通过静态的访问方式访问)
* */
public abstract class Car {
//私有的成员属性 变量
private int age;
//成员属性 常量
final int count = 2000;
//静态常量
static final String FACTORY = "华晨";
public Car() {
super();
}
public Car(int age) {
super();
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void run() ;
public void eat() {}
}
package com.xdkj.javase.oop06;
public class Bwm extends Car {
public Bwm() {
super();
}
public Bwm(int age) {
super(age);
}
@Override
public void run() {
System.out.println("宝马车行驶!!!");
}
@Override
public void eat() {
System.out.println("bwm eat oil!!!");
}
}
接口
接口是一个很特殊的存在:
它是为了解决抽象类的实现类 只能继承一个抽象类而出现的,算是对于抽象类的一种扩展。
接口中可以包含:抽象方法,静态方法,静态常量(默认被static final来修饰),和由default修饰的方法。
public interface Swimming extends Jump,Song{//接口不同于其他类,它可以继承多个接口
void swim();
//1.8以后可以使用default修饰的方法
default void sleep(){
System.out.println("睡觉");
}
//1.8以后可以添加静态方法
public static void run(){
System.out.println("跑");
}
}
- 接口不是一个类 interface 修饰
- 接口只能被类实现 implements 关机字 实现接口的类称之为接口的实现类
- 一个类实现一个接口 必须重写接口中的抽象方法
- 接口中只能有抽象方法 抽象方法默认就是abstract 修饰的
- 接口中只使用抽象方法声明功能
- Java中一个类可以实现多个接口 必须对实现的所有的接口的方法进行重写
- 接口就是一个对功能的扩增 谁想对自己的业务功能进行扩增谁就实现这个接口
- 一个类可以继承一个类的也同时也可以实现多个接口
- 接口可以继承接口,并且可以继承多个接口 接口不能继承类
- 接口中的变量只能是静态常量 默认被static final 修饰