9.接口与内部类

一.抽象类

  • 不可以被实例化为对象
  • 必须被继承
  • 不能用final修饰
  • 属于后期(动态)绑定
  • 在设计阶段要确定好是否定义抽象类
  • 例子:哺乳动物类 abstruct class buru(){}

  2.抽象方法

  • 是不完整的方法,只有声明,但没有方法主体
  • 仅代表一种类型或功能,而不是具体的实现细节
  • 子类必须重写父类的抽象方法
  • 如果不想重写,那子类也必须是抽象类

二.接口

  • 例子:虽然球类和轮胎类没有直接联系,但是可以赋予他们一种通用的行为:弹跳
  • 可以解决单继承的缺陷
  • 接口中的方法也没有方法体body,方法时隐藏式的抽象方法,天生用public abstruct修饰
  • 类要实现接口的抽象方法

  2.接口与接口的关系:支持多继承

  3.特例(default修饰的方法)

default void func(){
}//必须有方法体,子类可用default方法
static void func1(){
}//子类用    类名.方法名 的方法调用静态方法

  4.接口的属性,天生用 public static final修饰,继承接口的类可直接访问

  5.类与接口的对比

  • 接口不能实例化
  • 接口无构造方法
  • 接口的方法都是抽象方法
  • 接口的成员属性都是用public static final修饰的
  • 接口无静态代码块
  • 接口支持多继承

  6.接口与抽象类的对比

  • 抽象类可以有构造方法,但接口没有
  • 抽象类有静态代码块,但接口没有
  • 类只能继承一个抽象类,但是可以实现多个接口

三.内部类

  1. 定义内部类的原因:班级类里面有学生类,学生类不能轻易被访问,这里的学生类就属于内部类。是对内部类的保护,把内部类当做一个属性看待
  2. 分类
  • 普通内部类(非静态内部类)
class MyOuter{
     private int x=10;
     public void makInner(){
           MyInner in=new MyInner();
           in.seeOuter();
     }  
     class MyInner{
           public void seeOuter(){
                 syso(x);
           }
     }
}        

  调用普通内部类:有两种方法,导包和不导包

public static void main(String args[]){
  MyOuter mo=new MyOuter();//先创建外部类
  MyOuter.MyInner inner=mo.new MyInner();
  //mo.的方式创建内部类
  inner.seeOuter();
}
  • 静态内部类:只能访问静态属性和静态方法
class BigOuter{
  static class Nested(){}
}
class Broom{
  public static void main(String []args){
  BigOuter.Nested n=new BigOuter.Nested();}
} //用类名.的方式创建静态内部类对象
  • 局部内部类:在外不能访问,不能创建对象,只能在本类的方法中创建对象

         可视为局部变量

         在局部内部类中,可以访问局部变量,但不能修改

public void func(){
    int i=0;
    final int j=1;
    class InnerClass4{
        System.out.println(i);
        //i++;方法中的局部变量不能修改值,只能访问
    }
    InnerClass4 in=new InnerClass4();
}
  • 匿名内部类:相当于创建了一个没名字的类,然后创建对象,用父接口的引用指向(多态),可重写方法
Inter1 i=new Inter1(){
    @override
    public void func1(){}
}

  局部匿名内部类:把匿名内部类放到局部内部类中,相当于局部变量,只能用一次。

  欲知详情:http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html

  

猜你喜欢

转载自www.cnblogs.com/anzhilanxiao/p/10584683.html
今日推荐