java中的抽象类,接口,内部类

来源:互联网 发布:金山软件股东 编辑:程序博客网 时间:2024/05/16 23:39

抽象类(abstract class):

    在class前加上abstract的类就是抽象类,如:public abstract class A{};
    用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法(抽象方法没有方法体)。
    含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
    抽象类不能被实例化。
    抽象方法只需声明,而不需实现。
    类中可以没有抽象方法,但是抽象方法必须位于抽象类中!
    子类继承抽象类必须重写抽象类里面的全部抽象方法。
    使用抽象类的唯一途径是派生一个子类,如果这个子类实现了抽象类中所有的抽象方法,
那么这个子类就是一个普通的类。它可以用来创建对象。如果不实现父类中的所有抽象方法,
那么它也是一个抽象类,剩下的方法由它的子类实现。
抽象方法不能是静态方法,因为静态方法无需对象就能执行。
抽象类不能new抽象类。

接口(interface):
    从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
    多个无关的类可以实现同一个接口
     一个类可以实现多个无关的接口(接口变相地实现了多继承)
     与继承关系类似,接口与实现类之间存在多态性
    接口里面只能有抽象方法,但是这种抽象方法没有abstract关键字。
接口特性:
    接口可以多重实现;
    接口中声明的属性默认为public static final的;也只能是public static final的;
    接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;
    接口可以继承其它的接口,并添加新的属性和抽象方法。


接口定义举例
    public interface Runner {
        int id = 1;//这里默认为常量
        public void start();
        public void run();
        public void stop();
    }
综合例子:
    public interface Runner {
        public void start();
        public void run();
        public void stop();   
    }

    public class Person implements Runner{
        public void start()
        {
            System.out.println("弯腰,蹬腿,咬牙,瞪眼,开跑");
        }
        public void run()
        {
            System.out.println("摆动手臂,维持直线方向");
        }
        public void stop()
        {
            System.out.println("减速直至停止,喝水");
        }
        public static void main(String args[])
        {
            Runner wanghui = new Person();
            wanghui.start();
            wanghui.run();
            wanghui.stop();
            System.out.println("/n");
        }
    }
输出结果:
弯腰,蹬腿,咬牙,瞪眼,开跑
摆动手臂,维持直线方向
减速直至停止,喝水

内部类:

总结:最最重要的一句话:抽象方法必须被重写,抽象类必须被继承。
子类继承抽象类必须重写抽象类里面的全部抽象方法。
接口是一种特殊的抽象类!
届口里面的抽象方法必须全部实现。
抽象类里面可以有非抽象方法,也就是实体方法。接口里面绝对不允许有实体方法。接口里面只能有抽象方法,但是这种抽象方法没有abstract关键字。
抽象类不可以new,同理,接口也不可以new
抽象类可以没有抽象方法


内部类(Inner class):
    在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类
    内部类和外层封装它的类之间存在逻辑上的所属关系
    Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。 Inner class的名字不能与包含它的类名相同;
    Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;

内部类特性:
    Inner class可以声明为抽象类 ,因此可以被其它的内部类继承。也可以声明为final的。
    和外层类不同,Inner class可以声明为private或protected;
    Inner class 可以声明为static的,但此时就不能再使用外层封装类的非static的成员变量;
    非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员;

原创粉丝点击