一、抽象类
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学习笔记_抽象类和成员内部类的更多相关文章

  1. No2_3.接口继承多态_Java学习笔记_多态

    ***多态***1.多态性:通常使用方法的重载(Overloading)和重写(Overriding)实现类的多态:2.重写之所以具有多态性,是因为父类的方法在子类中被重写,方法名相同,实现功能不同. ...

  2. No2_1.接口继承多态_Java学习笔记_接口

    接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...

  3. No2_4.接口继承多态_Java学习笔记_经典案例

    import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import jav ...

  4. No2_2.接口继承多态_Java学习笔记_继承

    ***类的继承***1.继承的实现extends2.[修饰符] class 子类名 extends 父类名{}3.修饰符一般为:public abstract final4.重写是指父子类之间的关系, ...

  5. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  6. jQuery源代码学习笔记_工具函数_noop/error/now/trim

    jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...

  7. 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

    摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...

  8. 《JavaScript高级程序设计》学习笔记12篇

    写在前面: 这12篇博文不是给人看的,而是用来查的,忘记了什么基础知识,点开页面Ctrl + F关键字就好了 P.S.如果在对应分类里没有找到,麻烦告诉我,以便尽快添上.当然,我也会时不时地添点遗漏的 ...

  9. 《unix环境高级编程》学习笔记【原创】

    本文基于unix环境高级编程的学习的笔记,写的比较简如有不对,欢迎指点. 简单的描述下面函数的功能改变ctr+c信号原本的作用终止程序,在按下中断键的时候输出一句话. while循环主要读取用户的输入 ...

随机推荐

  1. 作业:汽车查询--弹窗显示详情,批量删除 php做法(0521)

    作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  2. 编写自己的javascript功能库之Ajax(仿jquery方式)

    本人学习的是php,所以就用php跟js来演示代码了,主要是锻炼自己写js的能力,练练手而已. 下面这是我编写的操作ajax的代码功能,勉强让我称之为库吧.. js代码实例(tool.ajax.js) ...

  3. python中的redis定义

    redis官方介绍,python的redis客户端可以一处定义,处处使用.到底是不是这样呢?是不是只要在配置文件里定义一次,不管在哪都可以使用了? 下面用代码说明: import redis impo ...

  4. 什么是SPI通信?

    SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC6 ...

  5. 数据挖掘-Python基本模块

    1.numpy:基础模块,高效处理数据.提供数组支持 2.pandas:数据探索和数据分析 3.matplotlib:数据成图模块,解决数据可视化 4.scipy:支持数值计算,支持矩阵运算,提供高等 ...

  6. 基于Http原理实现Android的图片上传和表单提交

    版权声明:本文由张坤  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/794875001483009140 来源:腾云阁  ...

  7. 改进RazorPad

    从Git 上下载了作者的源码后,感觉用起来挺别扭,而且还要BUG............ 经过“篡改”后,好用多了,呵呵..

  8. Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本

    需求:1.可通过 service spider start|stop|status|restart 命令对服务进行控制2.spider服务可开机自启动 start() { echo "sta ...

  9. 移动互联与O2O的完美衔接

    移动互联网虽然市场颇大,前景广阔,但是由于数据过于密集,很难精准的定位所谓的目标客户群,然而O2O的线下市场却与互联网市场有极大的反差.一直觉得高校周边的小商家是最幸福的生意人,客户明确(就是本校学生 ...

  10. Bootstrap风格登录界面设计样例

    参考:http://bootsnipp.com/tags/login Register Page   127.8K 187 Modal Login with jQuery Effects   159. ...