笔记19 面向对象继承总结

1.什么时候用继承?
当多个类具有相同的属性何方法时,我们把相同的属性和方法抽取出来,放在父类中,然后其它类再继承

2.满足 : 同一种类型 (is a)

3.extends 父类
Java单一继承:只有一个直接父类
当我们的类没有继承自任何类,那么这个类将继承Object
Object 类是所有类型的基类
equals(): 在Object中,实际上==
String:
equals():用于比较两个字符串的值
所有的引用类型:
比较地址 ==
比较值: equals
hashCode():能不能通过此方法去获取的对象内存地址(不能):加工过的内存地址
toString():将我们的对象转成字符串

要求:当我们编写实体类时,这3个方法希望大家能重写
finalize():可以重写,当系统调用gc(垃圾回收)自动调用此方法
clone():了解
getClass():获取自己的class文件,用于反射

4.子类的实现
4.1 构造方法
a.先完成父类对象的创建(super([…]))
b.再自己的创建
4. 2 子类自己的特有的属性和方法
4.3 子类不满足父类提供方法的细节,对父类方法进行重写(toString)

5.当父类的某些方法无法实现时,那么这些方法应该声明为抽象方法,当前的类也作为抽象类被子类继承
子类继承抽象父类时,必须重写抽象方法,如果无法重写,那么子类也将作为抽象类存在
抽象类不能new 对象

  1. 构建对象的方式发生变化
    类 对象的引用= new 当前类的构造方法();
    父类 对象的引用 = new 子类的构造方法(); //里氏调用法:能够用父类的地方,那么就可以用子类

7.类型转换
类 对象的引用 = new 当前类的构造方法();
父类 : 大类型(范围) 更抽象
子类: 小类型 更具体
编译类型: 写代码时,编译器的一种操作(看对象引用的类型),
运行时类型: 当代码跑起来,底层的一种调用方式(看实际的对象类型)
向上转型:
向下转型:

8.关于继承和抽象内容
8.1 虚方法 vs 抽象方法
什么是虚方法? 被子类重写过的父类的方法
普通的方法: 子类没有 eat sleep
虚方法: 在父类是正常的,但是子类重写过,对子类而且父类的这个方法没有意义
toString ,study

 抽象方法: 在父类是不能实现的,子类一定要重写
 
 Q: 虚方法            vs     抽象方法
 相同点:都是在父类中声明的方法
 不同点:
    1.已经实现               未实现
    2.不会要求子类的行为     规定必须要做

8.2 如果我的类不希望被继承? final
Math类的声明
public final class Mathextends Object
String类的声明
public final class Stringextends Objectimplements Serializable, Comparable, CharSequence
final + class:表示当前类不允许被继承:密封类
总结final
1.常量
a.final float PI=3.14f;
final 用于值类型,表示不能改值
PI= 3.1415f;//error

 b.final Student stu = new Student();
   final 用于引用类型 ,表示不能改地址
   stu.setAge(20);//改值是可以的
   stu  = new Student("俊俊",...);//error

2.密封类
public final class xxx{}
3.密封方法
public final xxx xxx(){}

8.3 方法不希望被重写? final

8.4 抽象方法能不能是final,static

9.项目案例:
类 : 完全没问题
调用: 今天是我们要解决的

发布了19 篇原创文章 · 获赞 0 · 访问量 112

猜你喜欢

转载自blog.csdn.net/qq_45212924/article/details/105015762