1.抽象类(abstract class)
随着继承层次中一个个新的子类的定义,类变得越来越具体,而父类则变得更加的通用。类的设计应该保证父类和子类能够共享特性,有时将一个父类设计的非常抽象,以至于他没有具体的实例,这样的类成为抽象类。接口就是彻底的抽象类。
抽象类:如果一个类中包含抽象方法,那么这个类就是抽象类(抽象类不一定有抽象方法)。
-
通过把类或者类中的某些方法声明为abstract来表示一个类是抽象类;
-
抽象类不能够被实例化;(实例化必须加载类,因为不知道抽象方法的方法体,所以不能被实例化)
-
抽象类的子类需要实现父类中的所有的抽象方法,否则该子类也需声明为抽象类;
-
抽象类可以实现接口;
-
抽象类可以继承具体类;
-
抽象类也可以有**main()**方法;
-
构造方法和static方法不能声明为抽象的;
-
抽象类中可以具有指向子类对象的对象引用。
-
可以有构造方法
-
抽象方法必须为public或者protected(因为如果为private,则不能被子类继承),缺省情况下默认为public。
示例代码:
package Test_9;
//基类声明为抽象类
abstract class Base
{
//抽象类中可以有其他方法
public void method()
{
System.out.println("Base");
}
//抽象方法没有方法体{}
abstract public void Test();//
}
//子类
class Son extends Base
{
//子类实现父类的抽象方法
@Override
public void Test() {
// TODO Auto-generated method stub
}
}
public class Test{
public static void main(String[] args) {
//Base base1 = new Base();编译出错,抽象类Base不能够被实例化
Base base = new Son();
base.method();
}
}
2.接口(Interface)
定义:某个事物对外提供一些功能的声明。
-
接口也是实现了多态,同时接口也弥补了Java单继承的弱点;
-
使用接口声明方法和常量,接口中的方法只能是声明,没有具体的实现,但是Java8开始,可以允许接口中的方法有方法体;
-
接口中的成员变量默认是:
public static final
;而且必须赋初值; -
接口中的方法默认是:
public abstract
-
不能有构造方法
-
可以有main函数
package Test_9;
interface MyInterface{
int i = 1;//必须赋初值
void add();
}
//demo类实现接口 MyInterface,如果有多个接口被实现用逗号隔开
class Demo implements MyInterface{
//实现接口的方法
@Override
public void add() {
System.out.println(i);
}
}
public class Test{
public static void main(String[] args) {
Demo demo = new Demo();
demo.add();
}
}
package test11;
/**
* 接口可以继承(或扩展)多个接口
* @author msi
*
*/
interface A{
}
interface B{
}
interface C{
}
//接口不可以实现接口
interface D implements A{//编译出错
}
//,接口与接口之间的关系为继承,既可以单继承,也可以多继承。
interface E extends A,B,C{
}
public class interfaceTest {
}
public interface Inter {
/**
* 成员变量默认为:public static final x修饰
*/
public static final int a = 1;
/**
* 没有构造函数,不能实例化对象
*/
//public Inter{}
/**
* 方法默认为 public abstract修饰
*/
public abstract void test();
/**
* Java8开始可以拥有自己的方法体
*/
public static void test2(){
System.out.println("测试");
}
public static void main(String[] args) {
Inter.test2();
}
}
3.最终类
- 加上final修饰的类就是最终类;
- 加上final的方法就是最终方法;
- 最终类中可以有最终方法也可以没有(抽象类中可以有抽象方法也可以没有);
- 最终类不能被继承;最终方法不能被重写。