Java基础知识学习(四)
高级特性:内部类、抽象类
内部类(Inner Class),有时也称为嵌套类(Nested Class)
允许在一个类(或方法、语句块)的内部定义另一个类
使用内部类的主要原因有:
内部类可以访问外部类中的数据,包括私有的数据。外部类不能访问内部类的变量
内部类可以对同一个包中的其他类隐藏起来。
当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。
减少类的命名冲突。
- public class Outer {
- private int size;
- public class Inner {
- private int counter = 10;
- public void doStuff() {
- size++;
- }
- }
- public static void main(String[] args) {
- Outer outer = new Outer();
- Inner inner = outer.new Inner();
- inner.doStuff();
- }
- }
编译,会生成两个 .class 文件:Outer.class 和 Outer$Inner.class
*必须先有外部类的对象才能生成内部类的对象,因为内部类需要访问外部类中的成员变量,成员变量必须实例化才有意义。
不建议使用内部类,破坏代码结构,使用意义不大
static可以修饰内部类,相当于外部类的static成员,直接创建
局部内部类,定义在代码块中的类。它们只在定义它们的代码块中是可见的。
匿名内部类,匿名类必须继承一个父类或实现一个接口。
不使用匿名内部类来实现抽象方法:
- abstract class Person {
- public abstract void eat();
- }
- class Child extends Person {
- public void eat() {
- System.out.println("eat something");
- }
- }
- public static void main(String[] args) {
- Person p = new Child();
- p.eat();
- }
引入了匿名内部类。
- abstract class Person {
- public abstract void eat();
- }
- public static void main(String[] args) {
- new Person() {
- public void eat() {
- System.out.println("eat something");
- }
- }.eat();
}
抽象类
这种只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。包含一个或多个抽象方法的类也必须被声明为抽象类
使用 abstract 修饰符来表示抽象方法和抽象类。
抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。
抽象类不能被实例化,抽象方法必须在子类中被实现。
- abstract class People{
- // 抽象方法
- public abstract void work();
- }
- class Teacher extends People{
- // 必须实现该方法
- public void work(){
- //TO DO
- }
- }
高级特性还包含接口和泛型
Java基础知识学习(四)的更多相关文章
- Java基础知识学习(九)
GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...
- Java基础知识学习(三)
面向对象部分 首先要了解面向对象的思想,与C#一致,都是面向对象的语言 访问修饰符 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private ...
- java基础知识学习笔记
本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...
- Java基础知识学习(一)
部门接了新项目,后台使用Java框架play framework,前端是html,前后台通过rest交互,能够支持多端的互联网架构. 因为之前没有Java基础,前端使用的也很少,决定深入学习一下Jav ...
- java 基础知识(四)
自己写一个简单的Map 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料 130 人赞同了该文章 许多许多年以前,在自学Java的时候,笔者曾经写过一个简单的Map,当年很有 ...
- java基础知识(四)java内存机制
Java内存管理:深入Java内存区域 上面的文章对于java的内存管理机制讲的非常细致,在这里我们只是为了便于后面内容的理解,对java内存机制做一个简单的梳理. 程序计数器:当前线程所执行的字节码 ...
- Java基础知识学习(二)
Java语法基础 数据类型.类型转换.运算符.逻辑运算符.参考C#,基本一致 输入输出 输出 System.out.print("abc"); System.out.printf( ...
- Java 基础知识总结 (四、String)
四.String public final class String extends Object implements Serializable, Comparable<String>, ...
- Java基础知识学习
1.什么是Java编程语言 Java是:一种编程语言.一种开发环境.一种应用环境.一种部署环境 2.Java编程语言的主要目标 (1)提供一种解释环境为:提高开发速度.代码可移植性.使用户能运行不止一 ...
随机推荐
- [水煮 ReSharper] 高效开发—十个实用的快捷键
所有 ReSherper 的功能都可以使用快捷键.大部分功能都有默认快捷键,剩下的少数功能可以自定义快捷键. ReSharper 提供了两种快捷键的方式 Visual Studio:这种方式可以减少与 ...
- 微信--获取access_token
今天,终于鼓足勇气,来到这片圣地,迎来人生新的开始. 第一次...... 最近做微信公众号,记录一下,仅供参看. 关于access_token微信公众号有相关说明: access_token是公众号的 ...
- C#微信公众平台账号开发,从零到整,步骤详细。
想到微信的火热,想到其他公司开发手游,如雷电,酷跑类的,都不是很火,但是弱智的“打飞机”和“天天酷跑”却是那么火热.于是乎,想做个微信营销的软件.首先想到的是手机连电脑wifi,用抓包工具抓微信的包, ...
- 【Java每日一题】20161202
20161201问题解析请点击今日问题下方的"[Java每日一题]20161202"查看 package Dec2016; public class Ques1202 { publ ...
- [教学] Firemonkey 之 StringGrid Header 自订显示
StringGrid Header 高度设定方法: uses FMX.Header; procedure TForm1.StringGrid1ApplyStyleLookup(Sender: TObj ...
- 几个最常用的Mysql命令
shell>mysql -u用户名 -p密码 mysql>show databases; mysql>use 数据库名称; mysql>show tables; mysql&g ...
- Ext.grid.Panel表格分页存储过程
/*首先需要引入两个Extjs插件类 Ext.ux.data.PagingMemoryProxy和Ext.ux.ProgressBarPager这两个类*/ /*下面是控制弹出窗体放大缩小时窗体居中的 ...
- apache tiles 页面模板的使用
jar包maven <!-- Tiles 模板--> <dependency> <groupId>org.apache.tiles</groupId> ...
- Verilog学习笔记简单功能实现(八)...............同步FIFO
Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上 ...
- PHP两个数组相加
在PHP中,当两个数组相加时,会把第二个数组的取值添加到第一个数组上,同时覆盖掉下标相同的值: <?php $a = array("a" => "apple& ...