Day6 面向对象的学习super

Day6

面向对象学习

super学习

是子类调用父类的方法。比如子类有一个和父类名字相同的属性,通过super就可以调用父类的属性。

因为私有的东西无法被继承

所以super也不能调用super、 super只能出现在子类

super() 调用了父类的构造方法 而且调用父类的构造器必须放在代码的第一行

而this也是一样,只能够在第一行,所以在调用构造器的时候,super和this只能选一个

只要写了有参构造,无参构造就没了。

父类没有无参构造,所以子类也不能写无参构造

所以以后要写有参构造的时候,必须还要再加一个无参的手写的构造。以防止子类错误。

方法重写

重写都是方法的重写,和属性没关系

父类的引用指向了子类

@override 重写

子类重写了父类的方法 与非静态方法有关。

重写的关键词只能用public。

重写的范围可以扩大,比如私有的重写为public 但是public不能重写成private。

抛出的异常可以被缩小,但不能被扩大。

总的来说重写,子类的方法必须要和父类的一致。而方法体不同,即内容不一样就重写。

重写的缘由

父类的功能子类不一定需要。所以需要子类去重写来满足子类自己的需求。

多态

子类重写了父类的方法,所以就执行子类重写后的方法。

对象能执行哪些方法主要看左边的类型,和右边关系不大。

多态是方法的多态,和属性没关系。类型转换异常 ClassCastException

多态的存在条件

  • 存在继承关系
  • 方法需要重写 而static类,不属于实例 final则是常量也不行 private是私有,传不到子类
  • 父类引用指向子类对象 Father f1=new Son()

多态会让程序变的更灵活

Instanceof 类型转换

是引用类型,然后判断一个对象是什么类型。

如果满足父子关系,返回一个true ,不满足则false

必须要有联系才能编写,不然直接报错

System.out.println(X  instanceof Y);//能不能编译通过,取决于X和Y是否存在父子关系

基本类型转换就是高转低,高的转化为低的就能强转。 低转高就不需要

而类的转化也差不多 父 与 子

父转子需要强转转换

((Student) s2).eat();//强转转换 才能使用子类的函数

子类转换为高类型即父类,可以直接转换,不过会丢失子类的方法。

static关键字

从刚学java就有这个疑惑,这个static 是定义静态的,细节是什么。

如果定义方法就是静态方法,定义变量就是静态变量

非静态的方法可以调用静态方法。

代码块可以加载一些初始化的数据

静态代码块是在类加载就会被执行,且永久被执行一次,没有加static的代码块程序是不会主动调用的。

先执行静态代码块再执行匿名代码块最后执行构造方法。

静态导入包

import static java.lang.Math.random;

这样可以直接调用random方法,而不用加前缀math

通过final被修饰的类就不能被继承,没有子类。

思考

继承后的多态,父与子之间的关系。大部分都很好理解,子继承父的东西,父亲里的公开的属性和方法都能够被子所用,但是父里的私有和final常量缺不会被继承。子可以重写父的方法,要求名字一样参数相同,唯一不同就是方法体也就是内容要不一样,instanceof就是来判断类之间的关系,但是一点关系都没有的是无法所用这个方法。类的类型转换也和基本的类型转换相似,子转父可以直接转无需强制转换,父转子则需要强制转换。static关键字,基本理解,等到线程里面再深入研究,至于用法就是,被static修饰的就是静态的。

posted @ 2022-09-20 23:56  青山隐隐丶  阅读(18)  评论(0编辑  收藏  举报