抽象类:使用abstract关键字进行修饰的类叫做抽象类
1.抽象类里面可以没有抽象方法
2.一个类里边有抽象方法那这个类必须是抽象类
抽象方法:
1.方法只有生命没有方法体:生命即规定方法三要素:方法名、参数列表、返回值类型
2.要使用abstract关键字进行修饰
定义抽象方法的意义:
1.对子类进行约束:让子类做一些特定的事
2.强制子类实现保证提供这种服务
abstract class A{
public abstract void print();//print()方法没有方法体;
}
//类B 继承A,类B 必须实现父类A中的抽象方法print()
class B extends A{
public void print(){
//方法体....
}
}
接口的定义
1.接口里不能有成员变量
2.接口一般定义抽象方法
public interface USB{
抽象方法
默认方法
静态方法
私有方法
}
public interface USB{
//抽象方法
void read();
void write();
//默认方法---在8版本可用 子类会被继承
public default void run(){
System.out.println("启动...");
}
//静态方法---在8版本可用 子类不会被继承,也无法继承
public static void run(){
}
//私有方法---在9版本可用 子类不会被继承
public void run(){
}
}
多态
定义:多态是指同一行为,具有不同的表现形式(调用同样方法,执行的是不同功能)
1.发生在有继承或者实现接口的情况下
2.在子类中对方法进行了重写
3.父类指向子类对象 父类类型 变量名=new 子类对象()
4.调用类里面的方法:静态方法:直接写类名.方法名
非静态方法:实例化对象,然后写对象名,方法名
5.多态的本质就是子类对象向上转型为父类引用
多态的好处:可以吧父类(接口类型)类型定义为方法的形参,在实际调用的时候传入参数比较灵活,可以传入父类类型的对象,也可以传入任意子类的对象
public class MultiDemo {
public static void main(String[] args) {
// 多态的引用,就是向上转型--自动转换--小类型转大类型
Animals dog = new Dog();
dog.eat();
Animals cat = new Cat();
cat.eat();
// 如果要调用父类中没有的方法,则要向下转型--强制转换--可能会出现问题,系统可能不会处理,运行可能出现异常--大类型转小类型
Dog dogDown = (Dog)dog;
dogDown.watchDoor();
}
}
class Animals {
public void eat(){
System.out.println("动物吃饭");
}
}
class Dog extends Animals{
public void eat(){
System.out.println("狗在吃骨头");
}
public void watchDoor(){
System.out.println("狗看门");
}
}
class Cat extends Animals{
public void eat(){
System.out.println("猫吃鱼");
}
}