抽象类
不能被实例化的类,只能被继承
定义:使用关键字abstract修饰类
**被abstract修饰的类就是抽象类
**可以被继承,也可以继承其他类
**不能创建实例
**其他资源和普通类一样
public abstract class Demo7 {
private String name;
private String sex;
private int age;
public void eat(){}
public void sleep(){}
}
定义:使用abstract修饰方法
**只能存在于抽象类中
**不能有方法体
** 如果子类继承了含有抽象方法的抽象类,那么必须要重写抽象方法
public abstract void play();
继承抽象类
public class Demo8 extends Demo7{
public void skill(){
System.out.println("独特的技能");
}
//重写父类中的抽象方式
@Override
public void play() {
System.out.println("我会打游戏");
}
}
抽象类实际应用
游戏中每个英雄都会有攻击力,防御力,魔抗,法强,血量,蓝量,每个英雄都有自己独特的技能
抽象类
public abstract class Hero {
private double hp;
private double mp;
private int atk;
private int def;
private int sr;
private int sp;
public abstract void q();
public abstract void w();
public abstract void e();
public abstract void r();
}
继承类
public class Play extends Hero{
@Override
public void q() {
System.out.println("屈人之威");
}
@Override
public void w() {
System.out.println("蓄意轰拳");
}
@Override
public void e() {
System.out.println("强手裂颅");
}
@Override
public void r() {
System.out.println("叹为观止");
}
}
接口
修饰符:interface
特点:
不能被创建对象
只能包含抽象方法
接口只能被实现,实现接口的类必须重写接口中所有抽象方法
实现接口关键字:implements
一个类可以实现多个接口
接口可以继承接口,不能继承类
接口实例
public interface Demo9 {
public void m1();
}
实现接口
public class Son1 implements Demo9/*一个类可以实现多个接口(,Demo8,Demo7,Demo6)**/{
@Override
public void m1() { //必须重写接口中的方法
}
}
接口的继承
public interface Demo10 extends Demo9{
//接口只能继承接口
}
总结
抽象类的特点(对比普通类)
**抽象类包含普通类中的所有元素,同时包含抽象方法(普通类没有抽象方法)
**抽象类也有构造器,但是不能被实例化(不能创建对象)
**抽象类可以继承抽象类(只能单继承),不需要实现抽象方法
**普通类继承抽象类,必须要实现抽象方法
**抽象类必然要被继承
**有抽象方法的类必然是抽象类
接口的特点
**接口不能实现接口,因为接口无法实现方法
**接口可以继承接口,还可以有多继承
**一个类实现接口或多个接口,必须实现所有接口中的抽象方法
**一个类继承其他类,还可以同时实现接口
jdk8新特性
给接口种方法提供默认实现,让实现它的类可以不实现该方法(jdk8以上版本)
public interface Demo9 { //接口
default void m1() {} //default 实现方法默认实现
}
接口和抽象类对比
抽象类是对类的一种抽象,接口是对方法的抽象
接口是一系列方法的集合
抽象类可以有普通类中的所有资源,接口只能有抽象方法
抽象类和接口都无法实例化,抽象类有构造,接口没有构造
接口可以被子类多实现,可以多继承多个接口,抽象类只能单继承
抽象类可以实现接口,不能实现抽象方法