对象向下转型、final关键字、内部类

对象向下转型:对象一旦向上转型为父类,就无法调用子类原本特有的内容。所以可以使用对象的向下转型 还原。
格式:子类名称 对象名=(子类名称)父类对象;
含义:将父类对象还原为本来的子类对象;
例子 Animal animal=new cat();
Cat cat=(Cat) animal;
如图:
在这里插入图片描述
类似于强制类型转换

instanceof关键字:
格式:
对象 instanceof 类型
将会得到一个boolean值结果,,判断前面类型的对象能不能当作后面类型的实例
if (animal instanceof Dog){
Dog dog=(Dog)animal;
dog.watchhouse();
}

final关键字常见四种用法
1.用来修饰一个类;
2.用来修饰一个方法;
3.修饰局部变量;
4.修饰成员变量;

final关键字用于修饰类的时候:
public final class 类名{}
含义:当前类不能有任何子类;即不能使用final类作为父类

final关键字用于修饰方法,方法不能被覆盖重写:
修饰符 final 返回值类型 方法名(参数列表){}
对于类、方法来说,abstract和final关键字不能同时用,因为矛盾

final用于修饰局部变量,那么这个变量就不能进行更改。一次赋值,终生不变。
如:final int num=20;
num=250//错误,不能改变
num=20//错误,只能赋值一次
对于基本类型来说,不可变说的是变量中数据不可改变;
对于引用类型来说,不可变说的是变量当中的地址值不可改变;
final的引用类型变量,其中的地址不可改变。

final用于修饰成员变量,则这个变量一样不可变。
1.成员变量有默认值,所以一旦用了final后不会再给默认值,必须手动赋值。
2.对于final的变量,要么直接赋值,要么通过构造方法赋值。
3.必须保持类当中所有重载的构造方法,都最终对final的成员变量进行赋值

java中的四种权限修饰符
public>protected>(default)>private
同一个类:都能访问
同一个包:private不能访问,其他都能
不同包子类:默认和private不能访问
不同包非子类:只有public可以访问

内部类:一个事物中包含另一个事物,即一个类中包含另一个类。
分为:(1)成员内部类;(2)局部内部类(包含匿名内部类)。

(1)成员内部类:修饰符 class 外部类名称{ 修饰符 class 内部类名称{//…} //…}
内用外,随意访问;外用内,需要内部类对象。
给内部类起名时,最好不用$符号
使用成员内部类两种方式:
1.间接,即在外部类方法中使用内部类,main函数只是调用外部类的方法。
2.直接:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称();
内部类与外部类并不是继承关系。(内部类继承object)
内部类调用外部类成员变量,如果重名,则调用格式为:外部类名称.this.外部类成员变量名

局部内部类:一个类定义在方法内部,就是局部内部类;‘局部’表示只有当前所属的方法才能它,出了方法外就不能用了。
定义格式:
修饰符 class 外部类名称
{ 修饰符 返回值类型 外部类方法名称(参数列表)
{ class 局部内部类名称{ //。。。}
}
}
定义类时,权限修饰符的规则:
外部类:public /(default)
成员内部类:四种皆可以(因为是成员)
局部内部类:什么都不能写
局部内部类,如果要访问所在方法的局部变量,那么这个局部变量必须是 有效final的(不能再改变)。
从java8开始,只要局部变量事实不变,final关键字可以省略。

匿名内部类:
如果接口的实现类,或者父类的子类只需要使用唯一的一次,那么就可以省略掉该类的定义,改为使用匿名内部类
定义格式:接口名称 对象名=new 接口名称() {覆盖重写所有抽象方法};
其中,new代表创建对象的动作,右边接口名称就是匿名内部类需要实现哪个接口,{}内是匿名对象的内容
注意:1.匿名内部类在创建时只能使用唯一的一次
2.匿名对象在调用方法时,只能调用唯一的一次
3.匿名内部类是省略了 实现类/子类 的名称,匿名对象是省略了 对象名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值