哪些公司需要做网站,做网站备案的公司,微网站开发外包,福建网站建设优化1.概述
抽象类、抽象方法以及接口#xff0c;这三个知识点是每个程序员必备的基础#xff0c;无论是在实际编程的时候#xff0c;还是在面试的时候#xff0c;都会出现这类问题#xff0c;面试官很可能就会问你#xff0c;interface和abstract的区别
当父类知道子类应该…1.概述
抽象类、抽象方法以及接口这三个知识点是每个程序员必备的基础无论是在实际编程的时候还是在面试的时候都会出现这类问题面试官很可能就会问你interface和abstract的区别
当父类知道子类应该包含什么样的方法但无法确定子类如何实现这些方法在分析事物时会发现事物的共性将共性抽取出实现的时候就会有这样的情况方法功能声明相同但方法功能主体不同这时将方法声明抽取出那么此方法就是一个抽象方法。
2.抽象类小结
抽象类和抽象方法都必须用abstract修饰符来修饰抽象方法不能有方法体抽象类有构造器但不能直接被实例化要创建对象涉及向上转型主要是用于被其子类调用抽象类中可以没有抽象方法但是有抽象方法的类必定是抽象类抽象类中可以包含静态方法抽象类不能用final修饰抽象类不能用private修饰抽象类也是类一样是用来继承的接口与类才是实现关系外部抽象类不能用Static修饰但内部的抽象类可以使用static声明抽象类可以继承抽象类抽象派生类可以覆盖基类的抽象方法也可以不覆盖。如果不覆盖则其具体非抽象派生类必须覆盖它们抽象类可以实现接口可以把接口中方法映射到抽象类中作为抽象方法而不必实现而在抽象类的子类中实现接口中方法
3.抽象类组成分析
普通类可以包含构造方法、普通方法、static方法、常量和变量等内容。而抽象类也是类而且是一个特别的类抽象类是指在普通类的结构里面选择性的增加抽象方法并以abstract关键字将该类修饰是的每个抽象类不管有没有抽象方法在其类结构中abstract关键字非加不可。
1、抽象类必须使用abstract修饰符来修饰抽象方法也必须使用abstract修饰符来修饰抽象方法不能有方法体。 2、抽象类不能被实例化无法使用new关键字来调用抽象类的构造器创建抽象类的实例。 3、抽象类可以包含成员变量、方法普通方法和抽象方法都可以、构造器、初始化块、内部类接 口、枚举5种成分。 4、抽象类的构造器不能用于创建实例主要是用于被其子类调用。 5、抽象类中不一定包含抽象方法但是有抽象方法的类必定是抽象类 6、abstract static不能同时修饰一个方法 abstract方法没有方法体不能直接调用static方法可以直接调用冲突
4.不能共存的关键字
不能与抽象类abstract共存的关键字主要有三个分别是final、private、static
1、final final抽象类不能用final修饰。因为抽象类一定要被abstract修饰而且抽象类一定要被继承否则该抽象类无意义。而被final修饰的类不能被继承也就是说不能有子类所以二者冲突不能同时使用
2、private private: 抽象类不能用private修饰只能用public或protected。首先要明确一点被abstract修饰的类是为了让非抽象子类看到并强制重写。如果抽象类中有私有的抽象方法那么该抽象方法不被子类所知就无法被复写。 而抽象方法出现的就是需要被复写。
3、static static如果static可以修饰抽象方法那么连对象都省了直接类名调用就可以了。众所周知抽象方法是没有方法体的可见运行也就没意义了。虽然外部抽象类不能用Static修饰但内部的抽象类却可以使用static声明
//定义一个抽象类A
abstract class A{//定义一个内部抽象类Bstatic abstract class B{ //static定义的内部类属于外部类public abstract void saoMethod();}
}
class C extends A.B{public void saoMethod(){System.out.println(saoMethod方法执行了);}
}
public class StaticDemo {public static void main(String[] args) {A.B ab new C();//向上转型ab.saoMethod();}
}运行结果 saoMethod方法执行了
说白了抽象类的功能就是一个类定义模板的功能。
5.关于接口interface
接口interface可以说成是抽象类的一种特例接口中的所有方法都必须是抽象的。
接口中的方法定义默认为public abstract类型接口中的成员变量类型默认为public static final。
6.抽象类与接口的区别
下面比较一下两者的语法区别
1.抽象类可以有构造方法接口中不能有构造方法。 2.抽象类中可以有普通成员变量接口中没有普通成员变量 3.抽象类中可以包含非抽象的普通方法接口中的可以有非抽象方法比如deaflut方法 4.抽象类中的抽象方法的访问类型可以是publicprotected和默认类型,虽然 eclipse下不报错但应该也不行但接口中的抽象方法只能是public类型的并且默认即为public abstract类型。 5.抽象类中可以包含静态方法接口中不能包含静态方法 6.抽象类和接口中都可以包含静态成员变量抽象类中的静态成员变量的访问类型可以任意但接口中定义的变量只能是public static final类型并且默认即为public static final类型。 7.一个类可以实现多个接口但只能继承一个抽象类。
注意 有抽象方法不一定是抽象类也可能是接口。抽象类不一定有抽象方法可以有非抽象的普通方法。