No2_5.类的高级特性_Java学习笔记_抽象类和成员内部类
一、抽象类
1.所谓抽象类,只声明方法的存在而不去实现它的类;
2.抽象类不能被实例化,即不能实现其对象;
3.abstract class 类名{ 类体 }
4.包含一个或多个抽象方法的类必须声明成抽象类;
5.abstract <方法返回值类型> 方法名(参数列表)
二、内部类
1.如果在一个类中再定义一个类,就将在类中定义的那个类称为内部类;
2.内部类分为成员内部类,局部内部类以及匿名内部类;
3.成员内部类:
a.可以在内部类中直接存取其所在类的私有成员变量;
b.外部类不可以直接访问内部类成员变量;
c.public class OuterClass{
private class InnerClass{
}
}
d.内部类中可以随意使用外部类的成员方法及成员变量,尽管变量修饰为private。
e.内部类的实例一定要绑定在外部类的实例上,如果在外部类初始人一个内部类对象,那么内部类对象就会绑定在外部类对象上。
f.如果在外部类和非静态方法之外实例化内部类对象,需要使用“外部类.内部类”的形式指定该对象的类型;
g.在实例化内部类对象时,不能在new操作符之前使用外部类名称那种形式实例化内部类对象,而是应该使用外部类的对象来创建内部对象;
h.内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象;
4.使用this关键字获取内部类与外部类的引用
a.如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字;
b.例如在内部类中使用this.变量,可以调用内部类的成员变量x;类名.this.变量,指定类的一个引用。
/***
* @author: liu_y
* @Date: 2016年7月24日
* @Title:抽象类 、成员内部类、使用this关键字获取内部类与外部类的引用
*/
/******************
* 抽象类
*/
abstract class Fruit {
public String color; // 定义构造方法
public Fruit() {
color = "green";
} // 定义抽象方法
public abstract void harvest();
}
// 继承抽象类Fruit
class Apple extends Fruit {
@Override
public void harvest() {
System.out.println("苹果已经收获!");
}
}
// 继承抽象类Fruit
class Orange extends Fruit {
@Override
public void harvest() {
System.out.println("橘子已经收获!");
}
}
/******************
* 成员内部类学习
*/
class OuterClass {
private String season = "Summer"; class InnerClass {
InnerClass() { // 内部类构造方法
}
public void inf() { // 内部类成员方法
System.out.println("这是内部类成员方法!");
} public int y;
} InnerClass in = new InnerClass(); // 外部类实例化内部类对象 public void ouf() { // 在外部类中调用内部类方法
in.inf();
System.out.println("外部类中调用内部类方法!");
} public InnerClass doit() {
// y=5; //外部类不可以直接访问内部类成员变量
in.y = 7;
season = "Autumn"; // 内部类可以直接访问其所在类的私有成员变量
System.out.println(season);
return new InnerClass();
}
} /***
* 使用this关键字获取内部类与外部类的引用
*/
class China {
private int age = 2016; // 外部类变量
// 内部类 class Beijing {
private int age = 1988; // 内部类变量 public void doit(int age) {
age++;
System.out.println("这是内部类方法中变量" + age);
System.out.println("这是内部类变量" + this.age);
System.out.println("这是外部类变量" + China.this.age);
}
}
} public class Hello5Abstract { public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* 抽象类使用
*/
System.out.println("抽象类:");
System.out.println("调用 Apple类的harvest()方法的结果:");
Apple apple = new Apple();
apple.harvest();
System.out.println("调用 Orange类的harvest()方法的结果:");
Orange orange = new Orange();
orange.harvest(); /****
* 内部类----成员内部类
*/
System.out.println("\n内部类:");
// 实例化内部类
OuterClass out = new OuterClass();
out.ouf(); System.out.println("\n调用外部类方法时返回一个内部类实例:");
OuterClass.InnerClass in1 = out.doit(); // 直接new一个内部类实例
in1.inf(); System.out.println("\n直接new一个内部类实例:");
// OuterClass.InnerClass in2=new OuterClass.InnerClass(); //额不可以这样用。。
// 应该使用外部类的对象来创建内部对象,内部类对象会依赖于外部类对象
OuterClass.InnerClass in2 = out.new InnerClass();
in2.inf(); /***
* 使用this关键字获取内部类与外部类的引用
*/
System.out.println("\n使用this关键字获取内部类与外部类的引用:");
China china = new China();
China.Beijing bj = china.new Beijing();
bj.doit(26);
} }
输出结果:
抽象类:
调用 Apple类的harvest()方法的结果:
苹果已经收获!
调用 Orange类的harvest()方法的结果:
橘子已经收获! 内部类:
这是内部类成员方法!
外部类中调用内部类方法! 调用外部类方法时返回一个内部类实例:
Autumn
这是内部类成员方法! 直接new一个内部类实例:
这是内部类成员方法! 使用this关键字获取内部类与外部类的引用:
这是内部类方法中变量27
这是内部类变量1988
这是外部类变量2016
No2_5.类的高级特性_Java学习笔记_抽象类和成员内部类的更多相关文章
- No2_3.接口继承多态_Java学习笔记_多态
***多态***1.多态性:通常使用方法的重载(Overloading)和重写(Overriding)实现类的多态:2.重写之所以具有多态性,是因为父类的方法在子类中被重写,方法名相同,实现功能不同. ...
- No2_1.接口继承多态_Java学习笔记_接口
接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...
- No2_4.接口继承多态_Java学习笔记_经典案例
import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import jav ...
- No2_2.接口继承多态_Java学习笔记_继承
***类的继承***1.继承的实现extends2.[修饰符] class 子类名 extends 父类名{}3.修饰符一般为:public abstract final4.重写是指父子类之间的关系, ...
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...
- 《JavaScript高级程序设计》学习笔记12篇
写在前面: 这12篇博文不是给人看的,而是用来查的,忘记了什么基础知识,点开页面Ctrl + F关键字就好了 P.S.如果在对应分类里没有找到,麻烦告诉我,以便尽快添上.当然,我也会时不时地添点遗漏的 ...
- 《unix环境高级编程》学习笔记【原创】
本文基于unix环境高级编程的学习的笔记,写的比较简如有不对,欢迎指点. 简单的描述下面函数的功能改变ctr+c信号原本的作用终止程序,在按下中断键的时候输出一句话. while循环主要读取用户的输入 ...
随机推荐
- 作业:汽车查询--弹窗显示详情,批量删除 php做法(0521)
作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...
- 编写自己的javascript功能库之Ajax(仿jquery方式)
本人学习的是php,所以就用php跟js来演示代码了,主要是锻炼自己写js的能力,练练手而已. 下面这是我编写的操作ajax的代码功能,勉强让我称之为库吧.. js代码实例(tool.ajax.js) ...
- python中的redis定义
redis官方介绍,python的redis客户端可以一处定义,处处使用.到底是不是这样呢?是不是只要在配置文件里定义一次,不管在哪都可以使用了? 下面用代码说明: import redis impo ...
- 什么是SPI通信?
SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC6 ...
- 数据挖掘-Python基本模块
1.numpy:基础模块,高效处理数据.提供数组支持 2.pandas:数据探索和数据分析 3.matplotlib:数据成图模块,解决数据可视化 4.scipy:支持数值计算,支持矩阵运算,提供高等 ...
- 基于Http原理实现Android的图片上传和表单提交
版权声明:本文由张坤 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/794875001483009140 来源:腾云阁 ...
- 改进RazorPad
从Git 上下载了作者的源码后,感觉用起来挺别扭,而且还要BUG............ 经过“篡改”后,好用多了,呵呵..
- Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本
需求:1.可通过 service spider start|stop|status|restart 命令对服务进行控制2.spider服务可开机自启动 start() { echo "sta ...
- 移动互联与O2O的完美衔接
移动互联网虽然市场颇大,前景广阔,但是由于数据过于密集,很难精准的定位所谓的目标客户群,然而O2O的线下市场却与互联网市场有极大的反差.一直觉得高校周边的小商家是最幸福的生意人,客户明确(就是本校学生 ...
- Bootstrap风格登录界面设计样例
参考:http://bootsnipp.com/tags/login Register Page 127.8K 187 Modal Login with jQuery Effects 159. ...