很多时候我们已经学过的东西却不能将它很快的想起,或者说的时候总是不全,那么这个时候就需要我们慢下来,好好总结,细细回味。
抽象类
关键字 abstract
abstract关键字修饰的类就是abstract类, 如果类中含有抽象方法,那么这个类就必须使用abstract关键字进行修饰,即这个类就是抽象类。
(public) abstract class demo{
abstract void print();//抽象的方法
}
注意:
- 抽象类的修饰符不能使用private,protected修饰,抽象的方法如果设置为private的话就不能被子类所实现,那么子类也就无法实现父类的抽象方法,致使子类也是abstract如此恶性循环,因此没有意义,好在idea对这样的不正确方式进行了提示。
- 子类在继承抽象类的时候,如果不将抽象类的所有抽象方法实现的话,那么该类也必须用abstract进行修饰。
- 抽象类不能实例化,即不能使用new关键字进行创建对象。
- 抽象类里面的方法也可以含有非抽象方法。
- abstract 默认的修饰符是public
- 子类使用extends继承抽象类
总结: 抽象类是为继承而存在的,存在的意义就是是对一些共有的方法进行抽象。
接口
关键字 interface
interface修饰的叫做接口,接口是一种非常抽象的类型,它比抽象类更抽象。
接口的书写方式如下
public interface demo{
int num=10;
void print();
}
对上述进行分析;
-
num
的被谁修饰?
–这里接口里面的变量默认被public static final修饰,即静态的不可变的常量。 -
里面的方法被谁修饰
– 里面的方法默认被public abstract 修饰 即抽象的方法 -
上述的变量和方法都不能使用private修饰
-
子类使用implemants将接口进行实现。
注意:子类必须实现接口里面的所有方法public class test implements demo{ @OverRide void print(){ //code } }
-
子类可以实现多个接口,间接的解决了java只能使用单继承的缺陷。
-
接口类是所有子类的父类,因此使用者只需要使用统一的接口就能调用子类实现的方法,因此接口经常配合多态进行使用。
demo
class hello implements demo{
@OverRide
void print(){
System.out.println("输出");
}
}
class test{
public static void main(String[] args){
demo d = new hello();
//这种设计模式非常的重要,正是由于暴露出来的这个接口我们不需要知道接口是谁实现的,如何实现的,我们只需要使用该接口类进行接收,进而使用即可。
d.print();
}
}