javaOO——内部类、多态、抽象

1、class文件的个数与java文件的个数无关,而是与java文件中类的个数相关
2、class文件的名字与Java文件的名字无关,而是与类的类名有关
3、如果类是public的,它的名字必须与java文件名保持一致,因此一篇java文件只能有一个public类
内部类的class文件名为:外部类类名$内部类类名.class
局部内部类
书写位置:是定义在外部类的某个方法里面的。
局部内部类除了定义的位置特殊以外,他仍是一个完整的类。
局部内部类有一种特例,叫匿名内部类
局部内部类class文件名为:外部类类名$数字内部类类名.class
匿名内部类  ---没有类名
它是在new对象的同时给出类的定义。所以只能产生一个对象用这一次

多态
一句话描述多态:相同的行为,不同的实现。
多态的分类:
 静态多态:编译时,系统就能决定调用哪个方法(方法重载满足相同的行为,不同的实现,是多态的一种体现,是静态多态)
 动态多态:运行中系统才能动态确定方法所指的对象
要想编译通过,运行也通过,最终在内存中只有两种情况:
1、父类引用指向子类对象
2、本类引用指向本类对象
本类引用指向本类对象
 编译通过:因为子类和父类就是is--a的关系,所以子类对象就是父类类型的,一点问题都没有。
 运行通过,因为每个子类对象在产生过程中,都是采用内存叠加的方式。
  先产生父类对象部分(就是一个完整的父类对象),然后再叠加子类特有。
  所以,这个子类对象拥有父类类型定义的一切内容。
唯一的问题是:
 当使用父类引用指向子类对象的时候,该引用只能操作到该对象身上继承父类的属性或方法。
 操作不到这个子类对象自己特有的属性和行为。
特例 ---也是动态多态的关键
 如果子类重写了父类的行为,那么只要对象是子类对象,不管用什么引用去指向(父类也好,子类也好),效果都会是子类重写后的效果。
动态多态:
 1、给的是父类引用
 2、因为父类引用只能那个看见来自父类的部分,所以这个方法一定要定义再父类身上,然后再子类重写。
动态绑定技术:
 运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法吧,从而实现多态性。
对象 instanceof 数据类型
 ---判断某个对象是否是某个数据类型
 ---返回类型:true,false
抽象方法
 父类的某些方法,只能确定方法声明。
 (即子类共有的方法叫什么名字,有什么参数,返回值为什么类型,访问修饰符应该是什么)
 但是不能确定方法的具体实现(因为不同的子类具体的实现不同,所有具体的实现应该让子类重写)
语法:再方法修饰符部分书写abstract修饰符,方法不能有实现部分(包括不能有{})
在方法的参数列表最后用;结束
影响:
 它可以在编译器,强制要求子类的实现必须重写来自父类的抽象方法。
 (抽象类的子类必须重写它的抽象方法,除非子类也是抽象类)
相关概念:最终方法
抽象类与抽象方法的关系:
(1)有抽象方法的类必须是抽象方法
(2)抽象类不一定有抽象方法
 但是从设计上来说,如果抽象类没有抽象方法,就失去了抽象的意义了。
(3)抽象是可以通过继承传递的。
抽象类:
 某些类的设计用途就是拿来做父类的,而不是产生对象的。
 为了避免误操作,把这种类设计为抽象类。
语法:在class关键字前面加修饰符abstract
影响: --抽象类只是不能产生对象了,但不影响别的内容
 1、该有属性、行为、构造、初始化块、内部类都可以看
 2、仍然可以指向子类的对象,访问共有的属性行为。
 3、与子类的关系还是is -a,甚至应该说是先考虑到is-a的关系才设计父类,再通过是否需要产生父类对象,来判定是否设定为abstract
抽象类和抽象方法的好处
 从设计的角度看,将一个抽象方法放在父类中,可以强制任何子类实现一个特别的行为。继承抽象方法的子类如果想要实例化对象,必须重写该方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值