java 多态和内部类
接口跟接口之间存在继承关系
一个接口可以继承多个接口
一个非抽象类:必须实现接口中的所有方法
一个抽象类实现接口 可以不实现接口中的方法 但是继承与抽象类的类必须要是实现接口中的方法
多态:一个对象的多种表现形态(父类的引用类型变量指向了字类的对象)
多态的满足条件 必须有继承关系 必须重写父类的方法
多态的使用注意点:
- 多态情况下:子父类同名的成员变量 ,默认访问父类中的成员(不管是普通还是静态成员变量)变量
- 多态情况下:子父类存在同名的非静态方法 ,访问的是子类的非静态方法
- 多态情况下:子父类存在同名的静态方法 ,访问的是父类的静态方法
- 在多态情况下 不能访问子类特有的成员变量和方法
总结:多态情况下 子父类存在同名的成员(成员指的是成员变量和方法(方法包括静态方法和普通方法)),访问的都是父类 除了同名的非静态方法是访问子类
Java编译器原理:
编译看左边 执行不一定看右边
编译看左边:java编译器在编译的时候会检测引用类型中是否含有指定的成员,如果没有就会报错
多态的使用场景:
1.多态可以用于做形式参数,可以让方法接受更多的类型
2.多态用于返回值类型 可以返回更多的数据类型
多态的另一种表现形式:
接口的引用类型指向实现类
实现关系下的多态:
接口 变量 =new 接口实现类();
内部类:一个类中定义另外一个类 ,这样的类叫内部类
内部 的文件名: 外部类名$内部类名
内部类分两种
- 成员内部类
如何访问成员内部类:
方式1:在外部类中定义一个方法创建内部类对象,再在通过对象进行访问
方式2:直接在其他类中创建内部类对象,直接通过对象访问
格式:
外部类 . 内部类 变量名 = new 外部类(). New 内部类();
内部类的使用注意点:
- 如果外部类和内部类中有同名成员变量,在内部类中java虚拟机默认访问内部类中的成员变量 ,可以通过“外部类 . this . 变量名”
- 如果内部类中的成员被private(私有)修饰,这个时候只能用方式1来访问内部类
- 内部类中有成员变量被static修饰 那么这个类也必须是一个静态的
内部类使用的好处‘
内部类中是可以直接访问外部类的所有成员
一般在什么情况下使用内部类:
我们在描述一个A对象,发现A对象中又需要有一个对象B很复杂,B对象又要访问A中的数据,这个时候用外部类来描述B对象更方便
局部内部类:
在类的方法中定义的类,这样的类叫局部内部类
局部内部类只能通过第一种方式访问(在内部类所在的方法里直接创建内部类对象 ,用这个对象访问内部类的方法)
局部内部类的使用注意:
- 如果局部内部类访问方法中的局部变量,方法中的局部变量必须用final修饰
匿名内部类:没有类名的内部类
匿名内部类的好处:简化书写
使用匿名内部类使用前提:
- 类必须有继承或者实现关系
匿名类的是使用
class Outer
{
//不用匿名
public void print(){
//匿名的Dog
//匿名内部类 : 只是没有名字 ,其他的个普通类没有区别。
Animal a = new Animal()这个其实是一个类的匿名内部类,具体是什么类就不知道了
Animal a = new Animal(){ // 匿名内部类(子类)
//具体实现
public void run() {
System.out.println("狗在跑");
}
public void sleep(){
System.out.println("狗在睡觉");
}
};
a.run();
a.sleep();
}
}
java 多态和内部类的更多相关文章
- Java 多态、内部类、异常、包
一.多态 1. 概述 理解:多态可以理解为事物存在的多种体(表)现形态. 例如: 动物中的猫和狗. 猫这个对象对应的是猫类型,例如:猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为 ...
- Java 中的内部类
前言 在第一次把Java 编程思想中的内部类这一章撸完后,有点印象.大概知道了什么时内部类,局部内部类,匿名内部类,嵌套内部类.随着时间的推移,自己慢慢的就忘记了,总感觉自己思考的东西不多,于是 看了 ...
- Java Inner Class 内部类
内部类 Inner Class 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态内部类static inner class ( ...
- Java中的内部类怎么用
一.为什么需要内部类?java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时 ...
- [java] 深入理解内部类: inner-classes
[java] 深入理解内部类: inner-classes // */ // ]]> [java] 深入理解内部类: inner-classes Table of Contents 1 简介 ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
随机推荐
- 阿里云免费申请免费SSL证书
随着互联网的不断进步与发展,对于网站与数据的安全性要求也越来越高,原本的HTTP明文传输已经不被信任,https逐渐被关注,从谷歌.火狐浏览器将对HTTP明文页面标记"不安全",到 ...
- C#基础练习
1.冒泡排序 namespace _0 { class Program { public static int[] BubbleSort(int[] arr) { ; i < arr.Lengt ...
- 多视图学习利器----CCA(典型相关分析)及MATLAB实现
Hello,我是你们人见人爱花见花开的小花.又和大家见面了,今天我们来聊一聊多视图学习利器------CCA. 一 典型相关分析的基本思想 当我们研究两个变量x和y之间的相关关系的时候,相关系数(相关 ...
- c# .Net并行和多线程编程之Task学习记录!
任务Task和线程Thread的区别: 1.任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行. 2.任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线 ...
- React的井字过三关(3)
这是React井字棋项目的最后一篇笔记,记述AI实现. 一. 是开头都会说的原理 但凡懂一点围棋的人都知道"大场"这个概念,可以浅显地把它理解为布局时棋盘上各处的要点.棋谚&quo ...
- 面向对象编程(OOP)
什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...
- 在SQL中 给字符串补0方法
--第一种方法SELECT RIGHT('00000'+CAST(ID AS nvarchar(50)),5) FROM dbo.TableName --左边补0,如 00001,00039 SELE ...
- HDOJ 4770 Lights Against Dudely
状压+暴力搜索 Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- iOS小Tip之查看FPS
可能大家有的时候会想要查看app在运行时的帧率能否达到60帧,如果达不到的话,你可能会想着去优化动画或者其它任何会影响显示性能的问题. 但是,你首先要观察到你的FPS,对吧? 我告诉大家一个简单的方法 ...
- TweenMax学习整理--特有属性
TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...