接口跟接口之间存在继承关系

一个接口可以继承多个接口

一个非抽象类:必须实现接口中的所有方法

一个抽象类实现接口  可以不实现接口中的方法  但是继承与抽象类的类必须要是实现接口中的方法

多态:一个对象的多种表现形态(父类的引用类型变量指向了字类的对象)

多态的满足条件  必须有继承关系 必须重写父类的方法

多态的使用注意点:

  1. 多态情况下:子父类同名的成员变量 ,默认访问父类中的成员(不管是普通还是静态成员变量)变量
  2. 多态情况下:子父类存在同名的非静态方法 ,访问的是子类的非静态方法
  3. 多态情况下:子父类存在同名的静态方法 ,访问的是父类的静态方法
  4. 在多态情况下 不能访问子类特有的成员变量和方法

总结:多态情况下  子父类存在同名的成员(成员指的是成员变量和方法(方法包括静态方法和普通方法)),访问的都是父类  除了同名的非静态方法是访问子类

Java编译器原理:

编译看左边   执行不一定看右边

编译看左边:java编译器在编译的时候会检测引用类型中是否含有指定的成员,如果没有就会报错

多态的使用场景:

1.多态可以用于做形式参数,可以让方法接受更多的类型

2.多态用于返回值类型   可以返回更多的数据类型

多态的另一种表现形式:

接口的引用类型指向实现类

实现关系下的多态:

接口 变量 =new 接口实现类();

内部类:一个类中定义另外一个类 ,这样的类叫内部类

内部 的文件名: 外部类名$内部类名

内部类分两种

  1. 成员内部类

如何访问成员内部类:

方式1:在外部类中定义一个方法创建内部类对象,再在通过对象进行访问

方式2:直接在其他类中创建内部类对象,直接通过对象访问

格式:

外部类 . 内部类  变量名 = new 外部类(). New 内部类();

内部类的使用注意点:

  1. 如果外部类和内部类中有同名成员变量,在内部类中java虚拟机默认访问内部类中的成员变量 ,可以通过“外部类 . this . 变量名”
  2. 如果内部类中的成员被private(私有)修饰,这个时候只能用方式1来访问内部类
  3. 内部类中有成员变量被static修饰 那么这个类也必须是一个静态的

内部类使用的好处‘

内部类中是可以直接访问外部类的所有成员

一般在什么情况下使用内部类:

我们在描述一个A对象,发现A对象中又需要有一个对象B很复杂,B对象又要访问A中的数据,这个时候用外部类来描述B对象更方便

局部内部类:

在类的方法中定义的类,这样的类叫局部内部类

局部内部类只能通过第一种方式访问(在内部类所在的方法里直接创建内部类对象  ,用这个对象访问内部类的方法)

局部内部类的使用注意:

  1. 如果局部内部类访问方法中的局部变量,方法中的局部变量必须用final修饰

匿名内部类:没有类名的内部类

匿名内部类的好处:简化书写

使用匿名内部类使用前提:

  1. 类必须有继承或者实现关系

匿名类的是使用

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 多态和内部类的更多相关文章

  1. Java 多态、内部类、异常、包

    一.多态 1. 概述 理解:多态可以理解为事物存在的多种体(表)现形态. 例如: 动物中的猫和狗. 猫这个对象对应的是猫类型,例如:猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为 ...

  2. Java 中的内部类

    前言 在第一次把Java 编程思想中的内部类这一章撸完后,有点印象.大概知道了什么时内部类,局部内部类,匿名内部类,嵌套内部类.随着时间的推移,自己慢慢的就忘记了,总感觉自己思考的东西不多,于是 看了 ...

  3. Java Inner Class 内部类

    内部类  Inner Class 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态内部类static inner class ( ...

  4. Java中的内部类怎么用

    一.为什么需要内部类?java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时 ...

  5. [java] 深入理解内部类: inner-classes

    [java] 深入理解内部类: inner-classes // */ // ]]>   [java] 深入理解内部类: inner-classes Table of Contents 1 简介 ...

  6. Java 多态——与C++的比较

    学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...

  7. C++和java多态的区别

    C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报  转载自:http://www.cnblogs.com/plmnko/archive ...

  8. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  9. 深入理解Java多态机制

    从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...

随机推荐

  1. Binary Agents

    FCC题目: 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. 示例: binaryAgent("01000001 01110010 01100101 01101110 ...

  2. 字符串 中的split 与数组中的join

    关于基础,总是隔一段时间,就得看一次,要不不用总是忘,今天又重新看了,一下字符串对象的split,然后就想到了数组对象的join. var str='wo shi yi ge js'; var str ...

  3. ios官方菜单项目重点剖析附项目源码

    原版教程:https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift ...

  4. JVM:查看java内存情况命令

    jmap (linux下特有,也是很常用的一个命令) 观察运行中的jvm物理内存的占用情况. 参数如下: -heap :打印jvm heap的情况 -histo: 打印jvm heap的直方图.其输出 ...

  5. sql 批量更新某个字段的值

    UPDATE Tabel1 t1 set t1.col1= ( SELECT col2 from Tabel2 t2 WHERE t1.col1=t2.col2) where exists ( SEL ...

  6. juery学习总结(二)——juery操作页面元素

    所有的操作都可以分为增.删.改.查四种,juery选择器代表查看的功能,那么剩下的操作就是对页面元素增.删.改.页面元素有3部分构成:标签,属性和内容,juery对元素的操作可以从这3方面入手. 一. ...

  7. juery学习总结(一)——juery选择器

    juery在工作中经常使用,遇到不会的问题往往百度一下,事后就忘.使用到现在也感觉不到有什么提高,为了每天进步一点点,从今天起抽时间记录下对juery的学习. 学习之前,首先要了解什么是网页元素,网页 ...

  8. Activiti5.10简易教程一

    Activiti5.10简易教程一 一搭建环境 1.1   JDK 6+ activiti 运行在版本 6 以上的 JDK 上.转到 Oracle Java SE 下载页面,点击按钮“下载 JDK ” ...

  9. jvm--1.class文件结构

    1.字节码(1)bytecode是构成平台无关性的基石 (2)当jvm发展到1.7-1.8的时候,jvm设计者通过,JSR-292,基本可以让其他语言运行在jvm上面. 如,Clojure , Gro ...

  10. C++中有关数组的相关问题

    1.数组长度相关: strlen(from <string.h>)只是针对字符数组才有的,他不包含\0的长度.无法对其他类型求长度.sizeof()则可以对\0发起作用.记住(a.leng ...