多态,final和static关键字

多态
1.java多态的前提
(1)有继承关系
(2)有方法覆盖(不是必须的)
(3)有父类引用指向子类对象 Fu f=new Zi();
Dog dog = new Dog();//我说这只狗是狗
Animal ani = new Dog();//我说这只狗是只小动物
2.多态中成员访问的特点
(1)成员变量:编译看左边,运行看左边
(2)成员方法:编译看左边,运行看右边
3.为什么成员变量和成员方法的访问不一样呢?
因为成员方法有覆盖,而成员变量没有覆盖。
4.多态的缺点:父类不能访问子类特有的方法。解决办法:向下转型。
多态的优点:提高了程序的扩展性。
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
fun(Animal a){…}
Cat c = new Cat();
调用:.fun©;//等价于Animal a=new Cat();
5.多态中的转型问题
(1)A.向上转型:从子到父,父类引用指向子类对象。Animal ani=new Dog();
B.向下转型:从父到子,父类引用转为子类对象。
注:强制转换可能会发生ClassCastException类型转换异常
(2)在做向下转型之前,要先做判断
if(ani instanceof Dog){
Dog dog=(Dog)ani;
dog.lookDoor();
}
instanceof左边的对象应该是右边类的父类或同类对象。
6.静态成员变量:随着类的加载而加载,随着程序的消失而消失。以后会学集合、数组,假如集合、数组被static修饰了,如果你的这个集合或数组比较庞大,占用内存比较大,那么在程序结束之前,它始终会占据着内存空间。如果内存比较小的话,就会出现内存溢出异常。解决的办法:1.加内存;2.不要用static来修饰这种比较占内存的集合。

final和static关键字
1.final
(1)final是一个关键字,表示最终的意思。可以用来修饰类、修饰变量、修饰方法。举例:绝育手术
(2)final修饰类的时候:表明该类是最终类,不能被继承。
(3)final修饰成员变量:表明该变量是常量,不能再次被赋值,只能赋值一次。
(4)final修饰方法:表明该方法是最终方法,不能被覆盖override。
2.static
(1)static是一个关键字,表示静态的意思。可以用来修饰成员变量和成员方法。
(2)static修饰成员的特点:
A.被类的所有对象共享。其实也是判断一个成员是否应该用static修饰的条件。
B.可以通过类名直接访问。类名.static成员。推荐使用。
C.优先于对象存在。优先于所有对象加载。
D.随着类的加载而加载。(它在方法区中的静态区里)
3.使用场景及原因
package com.mystudy.constants;
public class Constants{
/放各种常量:地址、网址、硬盘上的地址/
public static final String ADDRESS = “中国北京”;//调用:Constants.ADDRESS
//static修饰:是为了用类名进行访问,用到常量的时候。
//final修饰:不让外界进行修改
//public修饰:可以在别的类中尽心访问
}
4.访问权限
(1)非静态的成员方法:
A.能访问静态的成员变量
B.能访问非静态的成员变量
C.能访问静态的成员方法
D.能访问非静态的成员方法
(2)静态的成员方法:
A.能访问静态的成员变量
B.能访问静态的成员方法
(3)注意事项:静态成员方法中不能出现this、super这样的关键字。愿意你:静态是随着类的加载而加载,this、super这样的关键字是随着对象的创建而存在的。(开发的原则:先进内存的东东不能访问后进内存的东东。)

抽象类
1.在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
2.抽象类、抽象方法都必须用abstract修饰。
public abstract void eat();
public abstract class Animal{}
3.抽象类的特点:
(1)抽象类和抽象方法都必须用abstract来修饰。
(2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
(3)抽象类不能实例化,不能直接创建对象,但可以通过多态来创建对象。
抽象类如何实例化呢?参照多态的方式,通过子类实例化。
Animal ani = new Cat();
ani.ea();
ani.sleep();
(4)抽象类的子类:要么重写抽象类中的所有抽象方法,要么也是抽象类。
4.抽象类的成员特点:
成员变量:有成员变量,成员变量可以是变量,也可以是常量。
构造方法:有构造方法。抽象类中构造方法的作用是用于子类访问父类数据的初始化。
成员方法:有成员方法,成员方法可以是抽象的,也可以是非抽象的。
抽象方法:限定子类必须完成某些动作,起到一个规范和统一的作用。
非抽象方法:提高代码的复用性。
5.思维的方式:
分析:从具体到抽象
实现:从抽象到具体
使用:使用的是具体的类的对象。
举例:老师、基础班老师、毕业班老师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值