`
wangjie2013
  • 浏览: 168229 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java笔记(09,多态与内部类)

    博客分类:
  • JAVA
阅读更多

 

        Last modified:2013-06-12 16:51:55

        ***********************************************

 

多态:

多态:可以理解为事物存在的多种体现形态。

人:男人,女人。

职员:CEO,CFO,普通员工。

 

1,多态的体现

   父类的引用指向了自己的子类对象。人 x=new 男人();

   父类的引用也可以接受自己的子类对象。

 

2,多态的前提

   必须是类与类之间有关系,要么继承要么实现。

   通常还有一个前提:存在覆盖

 

3,多态的好处

   多态的出现大大的提高了程序的扩展性

 

4,多态的弊端

   提高了扩展性,但是只能使用父类的引用访问父类中的成员。

public static void function(Animal a){
   //Animal a = new Cat();
   a.eat();//这个方法是父类中的。不能是子类中的。
}

    

       5,多态的应用

 

Animal a = new Cat();//类型提升;向上转型

a.eat();

//如果想要调用猫的特有方法时,如何操作?强制将父类引用转成子类类型。向下转型

Cat c = (Cat)a;

c.catchMouse();

//千万不要出现这样的操作:就是将父类对象转成子类型。

//我们能转换的是父类引用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。

//多态自始自终都是子类对象在做着变化。

 

6,多态的在代码中的特点(多态使用的注意事项) 

在多态中(非静态)成员函数的特点:

在编译时期:参阅引用变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

 

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

 

在多态中,静态成员函数的特点:无论编译和运行都参考左边。(实际操作中没有人会去覆盖静态)

在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类。)

 

class fu {
   	int i = 1;
   	static String j = "a";
   }
   
   class zi extends fu{
   	int i = 2;
   	int k = 3;
   	static String j = "b";
   }
   class MainClass{
   	public static void main(String[] args){
   		fu obj = new zi();
   		System.out.println("i="+obj.i+" ,j="+obj.j);
   		zi obj1 = (zi)obj;
   		System.out.println("i="+obj1.i+",j="+obj1.j+",k="+ obj1.k);
   	}
   }
    

 

 运行结果:

 

i=1 ,j=a

i=2 ,j=b,k=3

多态时,成员属性不存在覆盖的一说。多态时到底访问的是父类还是子类的成员属性由声明的变量类型决定。

 

 

内部类:

内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。

内部类的访问规则:

1,内部类可以直接访问外部类中的成员,包括私有

   之所以可以直接访问外部类中的成员,是因为内部类中持有一个外部类的引用,格式:外部类名.this

 

2,外部类要访问内部类,必须建立内部类对象。

 

访问格式:

1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象。

如果想要将内部类封装,有两种方法:用private修饰或者定义在函数中。这样就不能在类外部建立内部类的对象了。

 

格式:外部类名.内部类名 变量名 外部类对象.内部类对象;(要指明外部类名!)

outer.Inner in = new Outer().new Inner();

 

2,当内部类在成员位置上,就可以被成员修饰符修饰。比如:private,将内部类在外部类中进行封装。

static:内部类就具备了static的特性。

当内部类被静态修饰后,只能直接访问外部类中的静态成员了。出现了访问局限。(静态内部类只能访问静态成员)

 

在外部其他类中,如何直接访问static内部类的非静态成员呢?

new Outer.Inner().function();

(非静态的成员要用对象去调用。)

 

在外部其他类中,如何直接访问static内部类的静态成员呢?

Outer.Inner.function();

  

注意:

如果内部类在成员位置:

1当内部类中定义了静态成员,该内部类必须是静态的,并且只能直接访问外部类中的静态成员了。

2当外部类中的静态方法访问内部类时,内部类也必须是静态的。

 

访问方式:Inner.function();外部类访问静态内部类中的静态成员)

访问方式:new Inner2().show();外部类访问静态内部类中的非静态方法)

 

当描述事物时,事物的内部还有事物,该事物用内部类来描述。

因为内部事物在使用外部事物的内容。

 

内部类定义在局部时:

1,不可以被成员修饰符修饰 privatestatic 

2,可以直接访问外部类中的成员,因为还持有外部类中的引用outer.this。但是不可以随便访问它所在的局部中的变量(生命周期问题)。只能访问被final修饰的局部变量。

 

匿名内部类:

1,匿名内部类其实就是内部类的简写格式;

2,定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

3,匿名内部类的格式:new 父类或者接口( ){定义子类内容}

4,其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解为带内容的对象。

5,匿名内部类中定义的方法最好不要超过3个。

注意:匿名内部类实际上运用了多态的知识,所以:   

 

Object obj = new Object(){
   void function(){
   System.out.println("nihao");
   }
  }    // .function();  这是可以的!
   obj.function();
   //这是不能调用的,因为多态中你只能调用父类中的方法!
 

 

 

 思考如果某个类要继承另一个类的内部类(非静态),如何实现?

class Outer
{
	static class Inner
	{
		Inner(String str){
			System.out.println("Inner run...");
		}
	}
}

class Other extends Outer.Inner
{
	Other(){
		//new Outer().super("nihao");//Inner非静态时的实现方式。
		super("nihao");//Inner静态时的实现方式。
	}
}
public class MainClass
{
	public static void main(String[] a){
		new Other();
	}
}

 

 

 

 

 

 

0
4
分享到:
评论

相关推荐

    【笔记式】Java快速入门77课时--多态接口内部类篇(含200条笔记+60个实例)

    多态与接口 4.内部类 课程亮点: 笔记加案例详细讲解Java入门知识!!!提供详细的笔记作为辅助工具,2000多条笔记帮助学员快速掌握Java150多个知识点 课程特色: 笔记JAVA:用200条笔记串连所有知识点,让学员从...

    达内Java培训-CoreJava全程笔记(WORD唐亮版)

    CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰符 26 CoreJava DAY08 常用类 29 CoreJava DAY09 高级语言特征 30 CoreJava DAY10 主方法,静态导入,包装类,枚举 32 CoreJava DAY11 内部...

    CoreJava笔记

    CoreJava笔记 CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 6 CoreJava DAY03 数组 11 CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、多态 20 Core...

    Java基础最全笔记文档

    3. 多态、内部类、常用API 4. 日期与时间、日期类、包装类、正则表达式、Arrays 类、常见算法、Lambda 表达式 5. Collection集合、数据结构、List集合、泛型、Set集合、可变参数 6. 集合工具类Collections、Map集合...

    达内 CoreJava老师笔记汇总

    CoreJava DAY06 类的加载过程、实例化、继承、多态 37 CoreJava DAY07修饰符 50 CoreJava DAY08 常用类 56 CoreJava DAY09 高级语言特征 58 CoreJava DAY10 主方法,静态导入,包装类,枚举 62 CoreJava DAY11 内部...

    java学习笔记 初学者必读

    7.11.1. 内部类的分类 7-29 7.11.2. 成员内部类 7-29 7.11.3. 局部内部类 7-30 7.11.4. 静态内部类 7-30 7.11.5. 匿名内部类 7-31 7.12. 集合 7-31 7.12.1. 集合接口类层次 7-32 7.12.2. 集合类层次 7-33 7.12.3. 五...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    chapter15 反射与类加载器 499 15.1 运用反射 500 15.1.1 class与.class文档 500 15.1.2 使用class.forname() 502 15.1.3 从class获得信息 503 15.1.4 从class建立对象 506 15.1.5 操作对象方法与成员 ...

    Java基础笔记.md

    包含jdk的安装(建议安装版本1.8),java语言概念、基本数据类型、条件控制、面向对象基本概念、继承和多态、接口、java异常处理、内部类和匿名类。通俗易懂,易于理解的大纲。希望对大家有帮助!!!

    java内部学习笔记.docx

    3.16内部类 26 3.17匿名类 27 3.18二维数组和对象数组 28 3.19其他注意事项 28 Java SE核心I 30 4.1 Object类 30 4.2 String类 31 4.3 StringUtils类 33 4.4 StringBuilder类 33 4.5正则表达式 34 4.6 Date类 35 4.7...

    java语言程序设计 java编程笔记 由浅入深的笔记 共32份 全套资源.rar

    【完整课程列表】 API集合.docx clone.docx Date日期.docx GC垃圾回收机制.docx instanceof运算符.docx io.docx java基础关键字.docx ...线程和内部类.docx 循环和类对象.docx 异常.docx 正则表达式.docx 总结.docx

    Java 面向对象笔记

    Java面向对象笔记 Java面向对象知识点分成7部分:对象类、继承多态、构造器、类包内外访问权限、各种静态内部类、抽象函数、接口

    Java基础知识总结(超详细整理)

    本套笔记循循渐进,适合初入计算机行业的小白,从Java概述到语法,再到循环,数组,方法,面向对象,继承,多态,内部类,集合,异常,IO流,多线程,网络编程,Lambda表达式,最后是类加载器,反射,模块化。...

    Java面向对象程序设计笔记

    Java面向对象程序设计笔记: 目录----非原创,上课的时候老师给的资料哦 第一章 Java 前凑 3 1. Java前凑 3 Java产生的目的 3 Java的诞生的历史 3 2.Java语言的特点 3 简单性 3 面向对象 3 网络技能 3 3....

    JAVA学习笔记第八天——示例代码Day08

    JAVA学习笔记第八天——示例代码Day08,包含接口作为方法参数和返回值示例代码、多态示例代码、内部类示例代码

    JavaSE笔记.rar

    学习JavaSE做的一些笔记,包括Java基础知识(关键字,语句,常量,变量,运算符,数组,方法),Java面向对象(static,final,封装,继承,多态,内部类等)以及JavaAPI(String,正则,集合,映射,IO,Socket,反射,线程等技术)

    记录所有有关java的学习笔记.rar

    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问private成员变量,提供对应的getXxx()/setXxx()方法 public class Student { //封装 public int age; ...

    java学习笔记

    匿名对象4.Random类5.ArrayList集合5.String类6.static关键字7.Arrays数组工具类8.Math数学工具类继承与多态1.继承2.抽象类3.接口4.多态5.final关键字6.权限修饰符7.内部类常用API第二部分1.Date类2.Calender类3.Sys

    java基础笔记

    java初学者的学习笔记,很详细。 目录 0 第一节 7月15日 2 一、 IT行业相关介绍 2 二、C、C++和Java语言的比较 2 三、 JDK基础介绍 2 四、 面向对象与面向过程的比较 2 五、 Java相关介绍 2 六、 Path和Classpath...

    Java学习笔记(必看经典)

    JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象。 能够做...

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...

Global site tag (gtag.js) - Google Analytics