java面向对象内部类、抽象类、接口类
来源:互联网 发布:安阳淘宝电商摄影 编辑:程序博客网 时间:2024/05/18 02:02
一、内部类 1、内部类概述 (1)把类定义在另一个类的内部,该类就被称为内部类。 举例:把类B定义在类A中,类B就被称为内部类。 2、访问规则 内部类的访问规则 A:可以直接访问外部类的成员,包括私有 B:外部类要想访问内部类成员,必须创建对象 3、内部类的分类 (1)内部类的分类 A:成员内部类 B:局部内部类 (2)成员内部类 A:private 为了数据的安全性 B:static 为了访问的方便性 成员内部类不是静态的: 外部类名.内部类名 对象名 = new 外部类名.new 内部类名(); 成员内部类是静态的: 外部类名.内部类名 对象名 = new 外部类名.内部类名(); 4、局部内部类 局部内部类 A:局部内部类访问局部变量必须加final修饰。 B:为什么呢? 因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。 所以,堆内存还是用该变量,而改变量已经没有了。 为了让该值还存在,就加final修饰。 通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。 5、匿名内部类 匿名内部类(掌握) A:是局部内部类的简化形式 B:前提 存在一个类或者接口 C:格式: new 类名或者接口名() { 重写方法; } D:本质: 其实是继承该类或者实现接口的子类匿名对象 6、开发中的使用
匿名内部类在开发中的使用 我们在开发的时候,会看到抽象类,或者接口作为参数。 而这个时候,我们知道实际需要的是一个子类对象。 如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式简化。 interface Person { public abstract void study(); } class PersonDemo { public void method(Person p) { p.study(); } } class PersonTest { public static void main(String[] args) { PersonDemo pd = new PersonDemo(); pd.method(new Person() { public void study() { System.out.println("好好学习,天天向上"); } }); } }
7、面试题
interface Inter{ void method();}class Test{ //补足代码,通过匿名内部类。 /* static class Inner implements Inter { public void method() { System.out.println("method run"); } } */ static Inter function() { return new Inter() { public void method() { System.out.println("method run"); } }; }}class InnerClassTest{ public static void main(String[] args) { //Test.function():Test类中有一个静态方法function //.method():function这个方法运算后的结果是一个对象。而且是一个Inter类型的对象。 Test.function().method();//其实就是Inter in = Test.function(); //in.method(); }}
二、抽象类 1、概述 (1)把多个共性的东西提取到一个类中,这是继承的做法。 但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体具体实现不一样。 也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。 所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。 而一个没有具体的方法体的方法是抽象的方法,需要被指定关键字abstract所标示。 在一个类中如果有抽象方法,该类必须定义为抽象类。 2、抽象类的特点 抽象类的特点 A:抽象类和抽象方法必须用关键字abstract修饰 B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类 C:抽象类不能实例化 D:抽象类的子类 a:是一个抽象类。 b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。 3、抽象类的成员特点 A:成员变量 有变量,有常量 B:构造方法 有构造方法 C:成员方法 有抽象,有非抽象 4、抽象类的几个小问题 抽象类的几个小问题 A:抽象类有构造方法,不能实例化,那么构造方法有什么用? 用于子类访问父类数据的初始化 B:一个类如果没有抽象方法,却定义为了抽象类,有什么用? 为了不让创建对象 C:abstract不能和哪些关键字共存 a:final 冲突 b:private 冲突 c:static 无意义三、接口类 接 口(掌握) 1:是用关键字interface定义的。 2:接口中包含的成员,最常见的有全局常量、抽象方法。注意接口没有构造方法 注意:接口中的成员都有固定的修饰符。 成员变量:public static final 成员方法:public abstract interface Inter{ public static final int x = 3; public abstract void show(); } 3:接口中有抽象方法,说明接口不可以实例化。接口的子类必须实现了接口中所有的抽象方法后, 该子类才可以实例化。 否则,该子类还是一个抽象类。 4:类与类之间存在着继承关系,类与接口中间存在的是实现关系。 继承用extends ;实现用implements ; 5:接口和类不一样的地方,就是,接口可以被多实现,这就是多继承改良后的结果。java 将多继承机制通过多现实来体现。 6:一个类在继承另一个类的同时,还可以实现多个接口。所以接口的出现避免了单继承的局限性。 还可以将类进行功能的扩展。 7:其实java中是有多继承的。接口与接口之间存在着继承关系,接口可以多继承接口。 回顾猫狗案例,它们仅仅提供一些基本功能。 比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的, 是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。 接口都用于设计上,设计上的特点:(可以理解主板上提供的接口) 1:接口是对外提供的规则。 2:接口是功能的扩展。 3:接口的出现降低了耦合性。抽象类&接口区别 抽象类与接口: 抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义 抽象内容让子类实现, 可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。 接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。 抽象类和接口的共性:都是不断向上抽取的结果。 抽象类和接口的区别: 1:抽象类只能被继承,而且只能单继承。 接口需要被实现,而且可以多实现。 2:抽象类中可以定义非抽象方法,子类可以直接继承使用。 接口中都有抽象方法,需要子类去实现。 3:抽象类使用的是 is a 关系。 接口使用的 like a 关系。 4:抽象类的成员修饰符可以自定义。 接口中的成员修饰符是固定的。全都是public的。 在开发之前,先定义规则,A和B分别开发,A负责实现这个规则,B负责使用这个规则。至于 A是如何对规则具体实现的, B是不需要知道的。这样这个接口的出现就降低了A和B直接耦合性。
0 1
- java面向对象内部类、抽象类、接口类
- 黑马程序员 面向对象--抽象类、接口、内部类总结
- Java学习系列(五)Java面向对象之抽象类、接口、内部类、枚举类详解
- Java学习系列(五)Java面向对象之抽象类、接口、内部类、枚举类详解
- NO8.java笔记【面向对象、抽象类、abstract、接口、interface、多态 、内部类、匿名内部类、异常、Object类】
- Java面向对象之抽象类、接口、内部类、枚举类详解
- 黑马程序员 Java面向对象(继承,抽象类,接口,多态,内部类)
- Java基础之面向对象(抽象类、接口、内部类)
- 黑马程序员—Java面向对象(抽象类、模板方法设计模式、接口、多态、内部类)
- Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- 黑马程序员——Java面向对象之抽象类 接口 内部类笔记
- 黑马程序员-Java的面向对象(抽象类、接口、内部类和继承、组合、多态)
- 3.java面向对象语法学习(部分2-抽象类,接口,内部类)
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- Java基础知识:面向对象-抽象、接口、内部类
- 面对对象-抽象类,接口,内部类
- 黑马程序员——Java基础---面向对象(封装、继承、单例、抽象类、接口、内部类)
- dwz页面初始化
- debian 常用命令说明
- POJ 3255 Roadblocks(次短路)
- iOS UITextView内容添加后,自动滚动到最后一行
- 【计蒜客系列】挑战难题30:合法分数的组合
- java面向对象内部类、抽象类、接口类
- 【Java设计模式】· 策略模式(Strategy Pattern)
- hdoj畅通工程
- trie hdu1251 字典树
- json数据解析
- Segment Game (hdu 5372 树状数组+离散化)
- Java基础总结之各个模块重要知识点
- 共享内存
- iOS推送小结