接口与内部类
2017-03-12 20:17
134 查看
1, 接口(
<1>接口方法都是抽象方法,接口不可实例化,可以参照多态,使用子类进行实例化。接口与类之间是
<2>接口成员: 成员变量只能是常量,且是静态并公共的。默认修饰符为
<3>抽象类与接口:
共性:都是不断向上抽取的结果。
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。抽象类体现的是共性功能,体现“is a”关系。抽象类只能被单继承。
接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。接口中都有抽象方法,需要子类去实现。接口体现的是扩展功能,体现“like a”关系。接口需要被实现,而且可以多实现。接口中的成员修饰符是固定的,全都是
2, 内部类:使用内部类可以把有相互关系的接口和类放到一起,提高程序的可读性和维护性.
<1>内部类可以直接访问外部类,包括其私有成员。外部类要访问内部类,必须建立内部类对象.方式如下:
也可以在外部类的方法中创建内部类对象,外部类通过调用自己的成员方法,访问内部类。
<2>私有修饰符:
通常内部类被封装,都会被私有化,因为封装性不让其他程序直接访问。
<3>静态修饰符:
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。静态时,建立内部类对象方式如下:
<4>内部类编译后的文件名为:“外部类名$内部类名.java”。内部类可以直接访问外部类中的成员。因为内部中都持有一个外部类的引用。这个是引用是
<5>内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。这时要访问局部内部类,需要在局部方法中新建内部类对象。当内部类被定义在局部方法内时,只能访问局部方法中被final修饰的局部变量。因为如果不加final,局部变量生命周期和相关方法周期是一致的,如果方法弹栈,内部类就无法使用相关变量,加final后,变量进常量池,延长了变量的生命周期,内部类可以调用到。
<6>匿名内部类:继承一个类或实现一个接口,没有名字。
匿名内部类的格式:
new 父类名&接口名(){ 定义子类成员或者覆盖父类方法 }.方法。
New Inter(){}表示实现接口。如果实现了接口,再重写Inter抽象方法,那么就相当于Inter接口的子类对象.
匿名内部类的使用场景:在创建匿名内部类时,该类中的封装的方法不要过多,最好两个或者两个以内。
<6-1>匿名内部类的当做参数传递
试题:要求控制台输出
<6-3>最近在学习集合框架,在学习
You may say I am a dreamer, but I am not the only one. I hope someday you’ll join us. And the world will live as one.
interface):广义上对外提供规则的都是接口,接口降低了耦合性,增加了扩展。
<1>接口方法都是抽象方法,接口不可实例化,可以参照多态,使用子类进行实例化。接口与类之间是
implements关系。接口的子类:可以是抽象类,但没有意义。建议重写所有抽象方法。
<2>接口成员: 成员变量只能是常量,且是静态并公共的。默认修饰符为
public static final接口没有构造方法。成员方法只能是抽象方法。默认修饰符:
public abstract。
<3>抽象类与接口:
共性:都是不断向上抽取的结果。
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。抽象类体现的是共性功能,体现“is a”关系。抽象类只能被单继承。
接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。接口中都有抽象方法,需要子类去实现。接口体现的是扩展功能,体现“like a”关系。接口需要被实现,而且可以多实现。接口中的成员修饰符是固定的,全都是
public,而抽象类的成员修饰符可以自定义。
2, 内部类:使用内部类可以把有相互关系的接口和类放到一起,提高程序的可读性和维护性.
<1>内部类可以直接访问外部类,包括其私有成员。外部类要访问内部类,必须建立内部类对象.方式如下:
Outer.Inner oi = new Outer().new Inner();
也可以在外部类的方法中创建内部类对象,外部类通过调用自己的成员方法,访问内部类。
<2>私有修饰符:
通常内部类被封装,都会被私有化,因为封装性不让其他程序直接访问。
<3>静态修饰符:
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。静态时,建立内部类对象方式如下:
Outer.Inner oi = new Outer. Inner();
<4>内部类编译后的文件名为:“外部类名$内部类名.java”。内部类可以直接访问外部类中的成员。因为内部中都持有一个外部类的引用。这个是引用是
外部类名.this.
<5>内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。这时要访问局部内部类,需要在局部方法中新建内部类对象。当内部类被定义在局部方法内时,只能访问局部方法中被final修饰的局部变量。因为如果不加final,局部变量生命周期和相关方法周期是一致的,如果方法弹栈,内部类就无法使用相关变量,加final后,变量进常量池,延长了变量的生命周期,内部类可以调用到。
<6>匿名内部类:继承一个类或实现一个接口,没有名字。
匿名内部类的格式:
new 父类名&接口名(){ 定义子类成员或者覆盖父类方法 }.方法。
New Inter(){}表示实现接口。如果实现了接口,再重写Inter抽象方法,那么就相当于Inter接口的子类对象.
匿名内部类的使用场景:在创建匿名内部类时,该类中的封装的方法不要过多,最好两个或者两个以内。
<6-1>匿名内部类的当做参数传递
public class Demo { public static void main(String[] args) { PersonDemo pd = new PersonDemo(); //继承了Person类,重写了抽象方法,相当于person的子类 pd.method(new Person() { public void show() { System.out.println("show"); } }); } } //这里写抽象类,接口都行 abstract class Person { public abstract void show(); } /* 父类引用指向子类对象,调用父类show方法,实际执行子类的show方法; Person = new Person() { public void show() { System.out.println("show"); } }; */ class PersonDemo { public void method(Person p) { p.show(); } }
试题:要求控制台输出
hello world
class Test2 { public static void main(String[] args) { Outer.method().show();//说明Outer.method()返回一个对象 //相当于Inter i = Outer.method( );i.show } } interface Inter { void show(); } class Outer { public static Inter method() { return new Inter() { //返回Inter子类对象 public void show() { System.out.println("hello world"); } };//相当于创建Inter子类对象 } }
<6-3>最近在学习集合框架,在学习
TreeSet集合时需要重写
Comparator中的比较方法,为了方便,使用了局部内部类,这种写法确实比较优雅,给人一种封装的感觉。
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() { // 重写compare方法,定义比较方式 @Override public int compare(Student o1, Student o2) { int num = o2.getSum() - o1.getSum(); return num == 0 ? 1 : num; } });
You may say I am a dreamer, but I am not the only one. I hope someday you’ll join us. And the world will live as one.
相关文章推荐
- 201621044079WEEK06-接口、内部类
- 黑马程序员-Java的面向对象(抽象类、接口、内部类和继承、组合、多态)
- JAVA知识点梳理 抽象方法 接口 多态 内部类 异常处理
- Java学习之路0721(七)(抽象类、内部类、接口、多态,单子例模式、工厂模式))
- Java(六)接口与内部类
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
- 自定义接口内部类的两个具体应用(跨类传值)
- 黑马程序员-抽象类、接口、内部类
- java基础学习——内部类、抽象类、接口
- 黑马程序员——面向对象(抽象类、接口、内部类)
- Java核心技术 卷I —— 第6章 接口与内部类
- Java基础-接口,内部类及对象克隆的学习
- 接口与内部类
- 黑马程序员——Java面向对象之抽象类 接口 内部类笔记
- java 抽象类 接口 内部类
- 如果实现接口的类只使用一次用处不大换为如下简便写法——匿名内部类
- 抽象类、接口和内部类(下)
- 匿名内部类 Anoymous Inner Class, 可以继承抽象类,实现接口
- 内部类 new 接口名/抽象类名(){}
- 黑马程序员面试题面向对象二(多态,抽象类abstract,接口Interface,内部类,异常Exception,包package,String类,StringBuffer)