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循环主要读取用户的输入 ...
随机推荐
- ucos_ii 上锁函数OSSchedLock()函数透析
因为任务调度时一般都是通过OSTIMEDLY()来实现.在这个函数中会对当前的任务执行挂起.同时查看任务调度表中是否有优先级合适的就绪任务.如果当前任务运行时调用OSSchedLock()给调度器上锁 ...
- 戏说WSGI(Python Web服务网关接口)--[转载]
戏说WSGI(Python Web服务网关接口) 当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅: Zope,厚重的长枪.较早出现的武 ...
- Unity中Mecanim工作流
Mecanim工作流可以被分解为3个主要阶段:1.资源的准备和导入这一阶段由美术师或动画师通过第三方工具来完成,例如Max或Maya.2.角色的建立主要有以下两种方式1)人形角色的建立.Mecanim ...
- Altium Designer (protel) 各版本“故障”随谈
Altium 的版本很多,每个版本都或多或少有些可容忍或可不容忍的问题,此贴只是希望各位能将遇到的问题写出来,只是希望 给还在使用 altium 的网友一些参考,也希望有些能被 altium 所接受@ ...
- 轻量级GUI enlightenment
嵌入式和LINUX PC都可以使用: https://www.enlightenment.org/start
- Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚
最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数.以前 ...
- iptables 添加,删除,查看,修改
iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录.如果iptables不熟悉的话可以用apf,是一款基于iptables的防火 ...
- 【转】android service 之二(IntentService)
原文网址:http://rainbow702.iteye.com/blog/1143286 不管是何种Service,它默认都是在应用程序的主线程(亦即UI线程)中运行的.所以,如果你的Service ...
- [VBA]发布一个计算桩号之差的Excel自定义函数(VBA)
这是一个可以计算桩号之差(也就是得到长度)的Excel(或WPS)扩展函数,可以减少工程师在统计工程量时的工作量. 该函数具有一定的通用性.可以在MS Office和金山WPS上使用. 文末会给出使用 ...
- 无Root抓包:Packet Capture 1.2.3
无Root抓包:Packet Capture 1.2.3 http://www.coolapk.com/apk/app.greyshirts.sslcapture