面向对象三大特性
-
封装
-
继承
-
多态
构造器
- 和类名相同
- 没有返回值
作用
- new 实际在调用构造器
- 初始化对象的值
注意
- 定义有参构造器后 想使用无参必须,显示定义
封装
意义:
- 提高代码的安全性,保护数据
- 隐藏代码细节
- 统一接口
- 系统可维护性
继承 extends
所有类间接或直接继承Object类
super
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2bkmjLj-1617112866159)(C:\Users\WangYuanpeng\AppData\Roaming\Typora\typora-user-images\image-20210330143131950.png)]
super注意点
1. super调用父类的构造方法,必须在构造方法的第一个
2. super 必须只能出现在子类的方法或者构造方法中!
3. super和 this 不能同时调用构造方法!
Vs this:
代表的对象不同:
1. this:本身调用者这个对象
2. super:代表父类对象的应用
前提
his: 没哟继承也可以使用
super:只能在继承条件才可以使用
构造方法
this();本类的构造
super():父类的构造!
重写 static 静态
{
// public class Rewrite8_11 {
// public static void test(){
// System.out.println("A_test");
// }
//
//
// }
/*
public class Rewrite8_11_1 extends Rewrite8_11{
public static void test(){
System.out.println("B->test");
}
}*/
public static void main(String[] args) {
Rewrite8_11_1 b = new Rewrite8_11_1();
Rewrite8_11 a = new Rewrite8_11_1();
a.test();
b.test();
}
//A_test
// B->test
// 不加static
// 为对象引用
// B->test
// B->test
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表列表必须相同
3.修饰符:范围可以扩大但不能缩小:public>Protected>Default>private
4.抛出的异常:范围,可以被缩小,但不能扩大; ClassNotFoundException -->Exception(大)
重写,子类的方法和父类必要一致;方法体不同!
为什么需要重写:
1.父类的功能,子类不一定需要,或者不一定满足!Alt +Insert ; override;
多态
多态的注意事项
- 多态的方法是多态,属性没有多态
- 父类和子类有联系
- 存在条件 :继承关系,方法需要重写 父类引用指向子类对象 Father f1 = new son();
不是多态的:
- static 方法属于类 ,他不属于实例
- final 常量
- private方法
instanceof
instanceof 关键字用来对比左边的对象是否属于右边的对象
- instanceof 的左右两边必须是引用类型,java 八大基本数据类型无法使用 instanceof 来进行对比
- instanceof 用来判定左边的引用类型是否与右边的引用类型的类型是否相同,或左边引用类型是右边引用类型的子类或实现类(右边引用类型可以是类、抽象类、接口)
- instanceof 的对比结果为 boolean 类型,如果左右两边比对成功,返回 true ;否则返回 flase
- null 与任何引用类型进行 instanceof 对比的结果都是 flase,null 不属于任何类型,更不属于 object 基类的派生类(子类),需要特别注意
代码演示:
public static <T> boolean isNullOrEmpty(T t){
if(t == null){
return true;
} else if (t instanceof Collection){
return ((Collection) t).isEmpty();
} else if (t instanceof Map){
return ((Map) t).isEmpty();
} else if (t instanceof CharSequence){
return ((CharSequence) t).length() == 0;
}
return false;
}
/**
* 判定数字包装类为空或者0
* @return
*/
public static boolean NumberIsNullOrZero(Number number){
// 务必进行number的null值判定,因为null与任何类型进行instanceof的结果都是flase
if(number == null){
return true;
} else if(number instanceof Integer){
return number.intValue() == 0;
} else if (number instanceof Long){
return number.longValue() == 0;
} else if (number instanceof Float){
return number.floatValue() == 0;
}else if (number instanceof Double){
return number.doubleValue() == 0;
} else if (number instanceof Byte){
return number.byteValue() == 0;
} else if (number instanceof Short){
return number.shortValue() == 0;
}
return false;
}
测试代码:
public static void main(String[] args) {
Integer num = null;
System.out.println(NumberIsNullOrZero(num));
}
控制台打印:
false
————————————————
版权声明:本文为CSDN博主「菜-菜-菜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44309181/article/details/108471772
static
静态代码块 最先执行和类一起
只执行一次
static{
}
抽象类
abstract 关键字
public abstract class Person(){};
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ibNChFHm-1617112866161)(C:\Users\WangYuanpeng\AppData\Roaming\Typora\typora-user-images\image-20210330172325677.png)]
接口 interface
-
继承接口关键字 implements
-
实现接口的类,就需要重写接口中的方法
-
多继承 利用接口实现多继承
作用
-
约束
-
2.定义一些方法,让不同的人实现~10—>1
-
- public abstract
-
public static final
-
接口不能被实例化,接口中没有构造方法
-
implements可以实现多个接口
-
必须要重写接口中的方法~
内部类
成员内部类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jczhGKE8-1617112866162)(C:\Users\WangYuanpeng\AppData\Roaming\Typora\typora-user-images\image-20210330215428729.png)]
一个java 只能写一个public class
能写多个class