[JAVASE]笔记8

·权限修饰符

							本类			同包类		(不同包)子类  	(不同包)其他类	
私有的		private			√			
默认的		default			√			√			
受保护的	   protected	    √			√			√					
公共的		public			√			√			√				√

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

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

·重写override: —>方法

1、重载和重写
重载: ---->方法
1)、同一个类中
2)、多个方法的方法名相同
3)方法签名不同
重写: ---->方法
1)、不同的类
2)、继承
3)、方法的签名相同
区别:1)、子类中一旦方法重写,会对父类中同方法签名的方法进行屏蔽
2)、如果子类有重写父类中的方法,调用时会调用子类中重写的方法

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

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

= 权限修饰符:子类>=父类

注意:
1、被private修饰的方法不能被重写
2、被final修饰的方法不能被重写
3、被static修饰的方法不能被重写
如果子类中存在与父类静态方法重名的方法,记住要把子类的这个方法定义为静态的。但是这两个方法不构成重写。
4、重写返回值类型要比父类小(jdk1.5之前必须一样)
5、子类重写父类的权限访问修饰符,不能低于父类方法的访问权限

·super

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

1)、在构造器的首行可以调用父类中的构造器
super(参数) ----->匹配父类构造器的参数
如果没有显示定义,默认在子类构造器的首行存在super(),默认调用父类空构造器
2)、区分子父类同名问题
如果存在同名问题,默认隐藏this的时候,默认就近原则找当前子类中的,如果想要指定父类中,要使用super调用

·final

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

·Objec

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

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

== : 比较的是地址
equals:可以比较对象的内容是否相同
public boolean equals(){
return (this==obj);
}
equals在Object中默认比较的还是对象的地址 需要进行方法的重写来实现具体的功能,比如在String类中就重写了equals的方法成了比较字符串的内容是否相等。

·多态

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

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

4、多态使用成员
成员变量:
编译运行找父类|编译运行看左边
成员方法:
编译看父类,运行看子类
编译看左边,运行找右边
编译看类型,运行找对象
5、多态存在的三个必要条件:
要有继承,要有方法的重写,父类的引用指向子类的对象
(多态指的是方法的多态,属性没有多态)
·转型:cast
孔子装爹
孔子{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引用 instaceof B
判断A的引用是否为B类类型的对象,或者B类类的对象,如果是返回true,否则返回false

·abstract

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

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

·接口

接口:特殊的抽象类
类要继承 ---->只能单继承
接口要实现:抽烟 游泳 —>多实现
如果一个人会游泳就实现游泳接口,会抽烟实现抽烟接口,既会游泳又会抽烟就同时实现这两个接口

为什么不适用具体类,要使用抽象类?
方法体不知道如何定义,需要抽象方法,抽象类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值