一:抽象类的定义与使用
抽象类只是在普通类的基础上扩充了⼀些抽象⽅法⽽已,所谓的抽象⽅法指的是只声明⽽未实现的⽅法(即没有⽅法体)。所有抽象⽅法要求使⽤abstract关键字来定义,并且抽象⽅法所在的类也⼀定要使⽤abstract关键字来定义,表示抽象类。
抽象类 (包含抽象方法的类) 使用abstract 关键字修饰
重点总结:
1.抽象类不能被实例化
2.如果一个非抽象类继承了一个抽象类 则这个类必须重写这个抽象类的抽象方法
3.如果一个抽象类继承了一个抽象类 则这个作为派生类的抽象类可以不用重写抽象类的抽象方法
4.private 和 final 都不能与 abstract 同时出现
5.重写方法的时候:派生类的访问权限要大于等于基类的访问权限
6.抽象类里面可以包含非抽象方法
代码实现范例:
public abstract class Person { private int age; private String name; //属性 public Person(){ this.name = name; } public void Out(){ //普通方法 System.out.println("Person普通方法"); } public abstract void Play(); //抽象方法 } abstract class Student extends Person{ //抽象类继承抽象类不必重写方法 public void Out2(){ System.out.println("Student普通方法"); } } class Teacher extends Person{ //普通类继承抽象类必须重写父类的抽象方法 @Override public void Play() { System.out.println("老师也玩王者"); } }
7.抽象类无法被实例化,只能实例化抽象类的子类
public static void main(String[] args) { Person person1 - new Person(); //错误 抽象类无法实例化 Person person = new Teacher(); //正确 可以实例化抽象类的子类 }
二:接口
接⼝定义:接⼝就是抽象⽅法和全局常量的集合,在Java中接⼝使⽤interface关键字定义
重点总结:
1.定义接口使用关键字 interface 接口的名称使用I来表示
2.接口的数据成员默默认为 public static fianl
接口中的方法默认为 public abstract
3.接口内不能有已经实现的方法
4.接口无法进行实例化
5.接口可以继承多个接口,此时的接口拥有了继承的接口里面的抽象方法
6.如果一个抽象类继承了接口,那么这个抽象类中可以不实现接口的方法
但是如果有一个普通类继承了此抽象类,那么这个普通类必须实现所有的抽象方法
代码实现范例:
public interface Drink { public static final String Species = "饮料"; int Number = 0; // 属性默认为 public static final public abstract void Putsomething(); void Putwater(); // 方法默认为 public abstract /*void Putwater(){ } //错误 接口中的方法不能被实现*/ } interface Inews{ public abstract void Getnews(); } abstract class Tea implements Drink,Inews{ abstract void Make(); } class GreenTea extends Tea{ @Override public void Putsomething() { System.out.println("放入茶叶"); } @Override public void Putwater() { System.out.println("倒入开水"); } @Override public void Getnews() { System.out.println("等待10分钟"); } @Override void Make() { System.out.println("制作完成了绿茶"); } public static void main(String[] args) { // Drink drink = new Drink(); //错误 接口无法实例化 Drink drink1 = new GreenTea(); drink1.Putsomething(); drink1.Putwater(); ((GreenTea) drink1).Getnews(); ((GreenTea) drink1).Make(); //Getnews 和Make 方法都不是Drink类中的方法, // 他们来自于 GreenTea 所继承的父类Tea所拥有,如想要调用此方法,需将Drink1强转为 //GreenTea类型方可调用该方法 } }
三:抽象类与接口的区别
重中之重,诸君务记!!!