热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多态、内部类知识点总结。

多态定义:同一个类实例的相同方法在不同的情形下有不同的表现形式。方法多态:方法覆写方法重载对象多态性向上转型(90%):天然发生(认爹)应用场景:参数统一化父类父类引用子类实例以物
多态

定义:同一个类实例的相同方法在不同的情形下有不同的表现形式。

  • 方法多态:

方法覆写

方法重载

对象多态性

  • 向上转型(90%):天然发生(认爹)

应用场景:参数统一化

父类 父类引用=子类实例//以物换物
test(new Person());
//per=new Studnet();//子类指向父类
test(new Student());
Person per=new Student();//子类一定可以变成父类 向上转型
per.fun();

  • 向下转型(1%)://剩下1%不转(认儿)

子类 子类引用=(子类)父类实例
Student stu=(Student)per;//向下转型

需要强转,发生向下转型之前,一定首先发生向上转型

否则会抛出一个ClassCastException运行时异常,类型转换异常,发生在两个毫无关系的类之间强转时

引用对象 instanceof类:

定义:表示该引用能否指向该类,返回true可以指向,返回false不能指向

标准格式:

if(!(per instanceof Student)){//没有指向该类
per=new Student();
}
Student stu =(Student)per;

应用场景:发生在父类引用需要调用子类扩充的方法时,才发生向下转型变为子类引用调用其扩充方法

无论是向上转型还是向下转型,本质在于发生了方法覆写(多态的本质)

内部类

将内部类视为属性来看待(本质)

定义:所谓的内部类就是在类的内部进行了类结构的嵌套操作

  • 内部类优点:

1.内部类与外部类可以访问彼此的私有属性(内部类直接访问,外部类通过内部类对象访问)

2.使用内部类可以实现多继承的概念

 

class A{}

class B{}

class C{

class D extends A{}

class E extends B{}

}

  • 内部类可以对外部完全隐藏(内部类的保护性)私有内部类

class Outter{
//Inner类只能在Outter中使用,并且在Outter外部完全隐藏
private class Inner{
} }

  • 内外部类的关系

1.成员内部类的创建需要依赖外部类对象,先有外部类对象才可以产生成员内部类

2.内部类是一个相对独立的个体,与外部类不是is-a关系

3.内部类可以直接访问外部类的元素(所有属性和方法),外部类可以通过访问内部类对象间接访问内部类元素

eg.人和心脏的关系——

  • 分类

根据内部类的定义的位置以及关键字一共分为以下四种内部类

成员内部类(普通内部类)

——类比普通属性/方法

定义:直接定义在外部类之中,不加static修饰符

  • 外部类的外部创建成员内部类语法:

外部类.内部类 内部类名称=new 外部类().new 内部类();
Outter.Inner in=new Outter().new Inner();

成员内部类的限制:

  • 成员内部类可以访问外部类的静态属性
  • 成员内部类不能拥有静态域(静态方法和属性都不行)-能访问不能拥有

静态内部类

——类比静态属性/方法

定义:直接定义在外部类之中,加static修饰符

静态内部类只是包在外部类内部而已,除此之外和普通类没有任何区别,不再需要外部类对象。

static public int age=20;

  • 在外部类外部创建静态内部类语法:

外部类.内部类 内部类名称=new 外部类.内部类();
Outter.Inner in=new Outter .Inner();

静态内部类限制:

静态内部类能否拥有普通属性?能拥有普通,但是不能访问外部类的普通属性(没有外部类对象)

方法内部类

定义在外部类的方法中,不加任何修饰符,与普通内部类基本一致,只是作用域不同。

class Outter{
private int num=0;
public void test(int data){
class Inner{
public void fun(){
num++;
System.out.println(num);
System.out.prinln(data);
}
}
}
}

方法中若存在内部类,方法形参使用隐式final声明(JDK8后)JDK8之前用显式,因此方法内部类只使用形参而无法修改方法形参的值

方法内部类不能使用任何权限修饰符 public private protected

匿名内部类(抽象类)//简化代码

匿名内部类等同于方法内部类,就是没名字而已,除此之外和方法内部类完全一致

但是匿名内部类必须继承一个抽象类,或者实现一个接口。

abstact class Person{
public abstract void print();
//抽象类内部提供了一个很好的子类
public static Person getInstance(){
//匿名内部类
//等同于class extends Person
return new Person(){
public void print(){

};
}
}
}

 


推荐阅读
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
author-avatar
YooHoo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有