java基础进阶_Java基础进阶_3

本文详细介绍了Java中的多态特性,包括其概念、识别技巧、优势与劣势,并提供了应对劣势的解决方案。同时,文章讲解了内部类的分类、访问权限及创建方式,强调了静态内部类和成员内部类的区别。通过理解这些概念,开发者可以更好地进行代码组织和维护。
摘要由CSDN通过智能技术生成

多态:

格式:

父类名称 对象名称 = new 子类构造器;

接口名称 对象名称 = new 实现类构造器;

概念:同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征。

多态识别技巧:

对于方法的调用:编译看左边,运行看右边。

对于变量的调用:编译看左边,运行也看左边。

(左边是父类,右边是子类)

使用前提:

1.必须存在继承和实现关系

2.必须存在父类类型的变量引用子类类型的对象

3.需要存在方法重写

多态的优势:

1.右边可以实现组件化切换,业务功能也随之切换,便于维护和扩展,可实现类与类之间的解耦

2.实际开发过程中,父类类型作为方法形式参数,传递子类对象给方法,可以传递一切子类对象进行方法的调用,更能体现出多态的扩展性和便利

劣势:

当子类想调用自己独有的方法时,编译看左边,说明父类中必须要有此方法,不然编译阶段就报错。

如何解决劣势:

使用引用类型的强制类型转换。大范围转小范围需要强制转换。由父类类型转为子类类型需要强转。

有继承/实现关系的两个类型就可以实现类型转换,编译阶段一定不会报错,但运行阶段可能报ClassCastException

建议在转换之前先判断变量的真实类型,语法:变量 instanceof 类型

前者是后者的类型或者其子类类型才会返回true

内部类:

静态内部类:

用static修饰的内部类,在外部类里面。内部类和外部类成员一样的。可以在内部类访问外部类的静态成员,但不能直接访问实例成员,需要用外部类的对象来访问。

Outter.Inner in = new Outter.Inner(); //属于外部类本身。

成员内部类:

与普通类一样,无static修饰,但是不能在成员内部类里定义静态成员,但可以定义常量。

Outter.Inner in = new Outter.new Inner(); //属于外部类对象的,需要先创建外部类对象才能创建内部类对象。可以在成员内部类访问外部类的静态成员,也能直接访问实例成员,因为成员内部类是属于外部类对象的。

局部内部类:

可在类里面的方法、构造器、代码块、for循环里定义类,只能定义实例成员,不能定义静态成员,可以定义常量。

匿名内部类:

无名字的内部类,为了简化代码。

格式:

new 类名|抽象类|接口(形参){

方法重写。

};

特点:1.无名字的内部类

2.匿名内部类一旦写出来,就会立即创建一个匿名内部类的对象返回

权限修饰符:

717dfa61d3db910459ae4fe9a9f6dbf2.png

Object类:

equals()方法比较两个对象的地址,不相同返回false,但比较地址通常使用 == ,通常比较两个对象的内容需要按照自己要求重写此方法。

a.equals(b)和Objects.equals(a,b):后者可以防止a对象为空的情况,前者如果a对象为null会报空指针异常,后者更严谨。jdk1.7开始有Objects类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值