继承、final、super、覆写、多态

面向对象

1 extend

1.1 是什么

  1. 继承是从已有类中,派生出新的类。新的类拥有父类的属性和行为,并且可以扩展出新的类。
  2. java中只支持单继承,不支持多继承,这样可以让java中的继承关系比较简单。为了解决单继承功能变弱问题,java提供了接口,一个类可以实现多个接口。
  3. 继承是可以传递的,比如A继承了B,B继承了C,则A也会拥有C的功能
  4. 私有属性和构造方法是不能被继承
  5. 如果一个类没有显示继承其他类,则该类继承Object
    java.lang.Object 是java提供的根类(祖先)
    Object中的功能,是所有类对象都有的

1.2 能做什么

解决的问题:
提高了代码的效率,避免代码重写,提高代码重用性

1.3 怎么用

[修饰符] class 子类名 extends 父类名{ 代码块 }

2 Super

2.1是什么

1.保存了父类型特征
2.在有继承关系的体系中,可以通过super表示父类的数据

2.2 能做什么

1.用在成员/构造方法中,区分父类和子类同名的数据(同名后,子类优先级高,想使用父类,就需要使用super.xxx)
2.用在子类构造方法中,调用指定的父类构造方法
语法:super(参数); 必须在子类构造方法第一行
如果子类构造方法中,没有使用this(xxx),也没有super(xxx),则有一个super()去调用父类的无参构造
注:当父类没有无参构造时,子类会报错
this和super都必须出现在构造方法的第一行,也就意味着它们两个不能同时出现
3.this和super都不能出现在静态上下文中

2.3怎么用

super();默认调用
super.i;父类的变量i

3 Override

3.1是什么

Override是方法重写/覆写/覆盖,覆写特指 成员方法,其他的都不能重写

3.2应用场景

1.什么环境下需要覆写?
当父类的功能满足不了子类的需求的时候
2.覆写条件
2.1 有继承关系的体系中
2.2 方法名必须一致,如果方法名不一致就是两个方法了
2.3 参数列表必须一致,如果参数列表不一致,方法重载也就两个方法
2.4 返回值必须一致
2.5 不能有更宽泛的异常(异常只能越来越少)
2.6 不能有更低的访问权限
3 覆写的意义
功能越来越强
使用范围越来越广
错误越来越少

4.Final

4.1 是什么?

是修饰符,表示最后的,最终的,不可更改的
类:final修饰的类 不能被继承
变量:没有默认值,不能二次赋值,必须显示赋值(不能有不赋值的情况)
方法:final修饰的成员方法不能被覆写
final修饰的静态变量,一般称为常量,public static final xxx;常量名建议大写

4.2 怎么用
final int age;
public static final String Name=“XXXX”;
final class A{ }

深入final

final修饰的引用类型

final int age=1//不能二次赋值 age=2;

//final修饰的user
final User user = new User();
//age没有被final修饰,因此可以更改age
user.age=13;
System.out.println(user.age);

5 多态

5.1 软件设计六大原则

1 单一职责原则
原则思想 : 一个方法只做一件事,一个类只负责一个职责,这样当前职责改动,不会对其他程序产生影响
常识原则,几乎所有程序员都会遵循这个原则
优点 : 降低类和类之间的耦合度,提高可读性,可维护性,可扩展性,降低可变性的风险

2 里氏替换原则
原则思想 : 能使用父类的地方,就一定可以使用子类
子类还可以扩展父类的功能,但是不能更改父类的功能,并且子类还可以有自己特有的功能
优点 : 增加了程序的健壮性,即使有了新的子类,原子类不受影响,可以正常执行

3 依赖倒置原则
原则思想 : 高层次不应该依赖低层次,都应该依赖于抽象
优点 : 拥抱多种变化,可以减少需求变化带来的工作量

4 接口隔离原则
原则思想 : 类和接口之间应该建立在最小接口上

5 迪米特法则
原则思想 : 又称为最少知识原则,一个对象尽可能的少了解其他对象
一个类中尽量减少对其他类的依赖

6 开闭原则
原则思想 : 对修改关闭,对扩展开放
尽量通过扩展软件实体来解决需求的变化,而不是通过修改已有的代码来完成变化

5.2 是什么

多态就是里式替换原则的一种体现
能使用父类的地方就一定可使用子类

☆ 多态: 父类引用指向子类对象
父类引用:使用父类类型 创建的引用类型变量
指向:通过这个引用可以找到谁
通过父类创建的一个引用类型变量,找到了子类的对象
父类类型 变量名 = new 子类();
Animal a = new Cat(); 多态

5.3 怎么用

多态的几种形式:
1.直接多态: 父类 变量 = new 子类();
2 形参/实参:参数列表用父类声明,调用方法 传递子类对象

public void m1(Animal a ){}
m1(new Cat());
3 返回值多态: 返回值类型是父类类型,但是返回的对象 是子类对象
public Animal m2(){
	return new Cat();
}
Anima a = m2();

5.4优点

方便程序扩展,拥抱变化!

5.5 缺点

丢失子类特有的属性

5.6 向下转型

多态:又叫向上转型
子类到父类 是向上
父类到子类 是向下
想要向下转型 必须先发生向上转型

2强制类型转换,可能会出现异常 (原因是找不准对象和类的关系)
instanceof:判断某个对象是否由某个类实例化而来

if(a instanceof Dog){
	Dog d =(Dog) a;
}else if(a instanceof Cat){
	Cat c =(Cat) a;
}

5.7多态属性调用

1 父类没有的,都调用不了(多态缺点,丢失子类特有的属性)
2 父类有的,子类没有的,执行父类
☆3 父类和子类都有,除了成员方法执行子类,其余全部执行父类(因为只有成员方法可以覆写)

5.8 隐秘多态

通过子类,调用父类的方法的时候,此时父类这个方法中的上下文环境,就是多态环境.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值