java学习(Day8)

权限修饰符
本类 同包类 不同包子类 不同包其他类
私有的 private √
默认的 default √ √
受保护的 protected √ √ √
公共的 public √ √ √ √

注意:
以上四个权限修饰符都是成员修饰符(成员变量,成员方法),不能修饰局部
被private修饰的内容不能被继承
public和default(不能显示定义)能够修饰类

设计面向对象的原则之一: 开闭原则(对修改关闭,对扩展开放)

重载 : -->方法
1.同一个类中
2.多个方法的方法名相同
3.方法签名不同
重写 : -->方法
1.不同的类
2.继承
3.方法签名相同
重写和重载的区别:

子类中一旦方法重写,会对父类中同名的进行屏蔽
如果子类有重写父类中的方法,调用时会调用子类中重写的方法

检测重写方法的方式:
1.左边有向上的三角
2.在重写方法的上面添加一个注解 @Override

重写满足|注意的条件:
== 方法签名相同
<= 返回值类型:基本数据类型:子父类必须相同 引用数据类型:子类<=父类
>= 权限修饰符:子类>=父类

注意:
1.被private修饰的方法不能被重写
2.被final修饰的方法不能被重写
3.被static修饰的方法不能被重写
如果子类中存在于父类静态方法重名的方法,记住要把子类中这个方法定义为静态的

super:指代父类对象
this: 指代当前创建对象

  1. 用在构造器的首行可以掉用父类中的构造器
    super(参数)–>匹配父类中构造器的参数
    如果没有显示定义,默认在子类构造器的首行存在super(),默认调用父类的空构造
  2. 区分子父类同名问题
    如果存在同名问题,默认隐藏this,默认就近原则找当前子类中的,如果想要指定父类中,要使用super调用
    注意:
    先父类后子类
    不能显示同时定义this()和super(),因为都要存在于构造器的首行,但是可以隐式同时使用,默认调用父类空构造,显示调用子类其他构造器
    就近找局部,然后如果同时存在局部,子类成员,父类成员同名问题,默认找局部,子类成员this,父类成员super

final 最终的
被final修饰的变量为常量,不能改变
被final修饰的方法,不能被重写
被final修饰的类不能被继承(太监类)
思考: 被final修饰的一个对象的引用,是否能够修改对象中的属性值?
final Person p=new Person();
p.name=“张三”;

Object 所有类的父类(老祖宗类)
在java中的所有类都会直接或者间接的继承自Object

toString:
打印一个对象的引用,默认调用这个对象的toString()方法
目的: 打印对象的信息的字符串表示形式
类中重写toString方法,自定义方法体的实现

==比较地址
equals :
可以比较对象的内容是否相同
public boolean equals(Object obj) {
return (this == obj);
}
equals在Object中默认比较的还是对象的地址

多态使用成员
成员变量:
编译运行找父类
编译运行看左边
成员方法:
编译看父类,运行看子类
编译看左边,运行找右边
编译看类型,运行找对象

多态 面向对象三大特性之一
一种事物多种形态|多种表现形式

多态的前提:
类的继承 | 接口的实现
多态的最终体现:
父类的引用指向子类的对象
多态的目的:
父类的引用在调用子父类中同名方法的时候,会调用子类中重写的方法
注意:子类中新增的方法对父类不可见

转型:
孔子装爹
孔子{name=孔子;age=18; void teach(){讲论语…} void play(){打王者}}
孔子{name=孔子爹;age=30; void teach(){做生意…}}
有一个人来找孔子爹讲做生意上课,但是孔子爹去旅行
办法: 孔子化妆装成他爹的样子去上课 --向上转型
KongZiDie k=new KongZi();
因为真实去的是孔子,所以teach讲课讲的内容是论语
因为孔子和同学们关系很好,索引相约一起打王者
卸妆–>变成孔子的样子,因为孔子会打王者
大范围类型 :父类 小范围类型: 子类
KongZi z=(KongZi)k; --向下转型
z.play();

如果先要调用子类中新增的方法,需要向下转型

ClassCastException 类型转换异常
instanceof 运算符
A引用 instanceof B
判断A的引用是否为B类类型的对象,或者B类子类的对象,如果是返回true,否则返回false

面向对象:
思想
封装:对外隐藏内部的实现细节,提供公共的访问方式
继承:子类继承父类,就可以拥有父类中的成员
多态:在继承的前提下和方法重写的前提下,可以提高代码的服用型和扩展性

抽象类:
使用abstract修饰的类叫做抽象类
抽象方法:使用abstract的关键字修饰的方法
抽象方法没有方法体的方法
抽象方法必须存在于抽象类中

java工程师: 行为:工作
前端工程师: 行为:工作
定义个父类 develop开发部类 -->行为:工作

注意:
1.抽象类不是实例化 (创建对象)
2.抽象方法必须被重写(子父类继承)
3.如何使用抽象类中的内容:—创建具体子类的对象去使用
具体的子类:重写父类中所有的抽象方法+按需新增方法
抽象的子类:按需重写父类中的抽象方法+按需新增–>抽象类,如果想要使用最终需要具体子类
4.抽象类中可以存在抽象方法,可以存在具体方法
5.abstract不能和private,final,static,native一起使用
6.抽象方法只需要被重写一次,也可以按需重写多次

接口:
接口特殊的抽象类
类要继承 -->只能单继承
接口要实现 :吸烟 :游泳 —>多实现
如果有一个人类会游泳实现游泳接口,会抽烟实现抽烟的接口,即会游泳又会抽象,同时实现这两个接口
只要实现了这个接口,就有了这个能力,
接口在jdk1.8之前只能存在抽象方法
为什么不用具体的类,要使用抽象类?
方法体不知道如何定义,需要抽象方法,需要抽象类
抽象类会了,接口很简单,为什么不用抽象类要用接口,接口有什么好处,接口概念是什么样的,接口要怎么用,用的时候有哪些注意事项?

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

7、抽象类里可以没有抽象方法

8、如果一个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

10、接口可继承接口,并可多继承接口,但类只能单根继承。

猜你喜欢

转载自blog.csdn.net/TTsuper1/article/details/90072642