权限修饰符
java中4中修饰符分别为public、protect、default、private,他们这就说明了面向对象的封装性,所以我们要使用他们尽可能的让权限降到最低,从而安全性提高。(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况。)
注意:
以上权限修饰符只能修饰成员(static也只能修饰成员),成员修饰符(成员变量|成员方法)。private的内容不能被继承,因为经过private修饰后表示私有的,所以不能被继承。只有public和default能修饰类,并且default默认出现(也就是不写default,如果写了会报错)。protected的访问权限: 1.同包下的类。2.不同包的子类,并且只能通过子父类关系访问,只有子类中才可以使用。
重写override
重写和重载之间的区别:
重写和重载都是指方法。重载:
1.同一个类中有多个方法。
2.方法名字相同。
3.参数列表不同|方法签名不同。重写:
1.不同的类。
2.继承关系|实现关系。
3.方法签名相同(方法名+参数列表) 。
注意:如果存在方法的重写,在调用的时候调用的是子类中重写的方法。
重写方法会对父类中被重写的方法进行屏蔽。
如何检查方法的重写:
1.eclipse代码左边会有一个向上的三角符号。
2.强制检查 @Override。
class SiCong extends JianLin{//重写定义父类中某个功能的实现-->方法的重写//@Override强制检查是否重写static JianLin words(){System.out.println("我不在乎我的朋友有钱没钱,反正都没我有钱...");return null;}}
重写的特点
(==) : 方法签名(<=) : 返回值类型 :基本数据类型完全相同,但是引用数据类型:子类<=父类(>=) : 权限修饰符:子类>=父类的权限修饰符
不能被重写:
1.被private修饰的方法不能被重写。
2.被final修饰的方法不能被重写。
3.被static修饰的方法不能被重写。
如果子父类中的同名方法,父类中是静态的,子类中的同名方法要求也要被static修饰。
super关键字
super和this的区别:this 指代当前new的对象
super 指代父类对象
super用在构造器的首行调用父类中的构造器super的使用
super(参数列表)
必须要使用再首行,如果没有显示调用父类中其他构造器,默认调用父类空构造。super区分子父类中同名的成员
如果不存在子父类中同名成员问题,可以省略,默认之类中的找子类,父类中的找父类。
如果存在子父类中同名成员,并且想要调用父类中的成员,使用super表示父类对象,否则默认子类(就近原则)。 创建对象是先父类后子类先静态后成员
final(关键字)最终的
final修饰变量为常量。final修饰的方法不能被重写。final修饰的类不能被继承(太监类)。final修饰的是引用数据类型,对象的地址不能变,但是可以改变对象的成员。Object类(老祖宗)
object是java中所有类的根据类,java中的所有类都会直接或者间接的继承自Object类。
toString() 方法
toString()是object的方法之一,当打印一个对象的引用时候,会默认调用对象的toString(),获得一个引用地址。但是一般打印一个对象,其实是想要看对象的所有属性的值,这时候就需要重写toString()方法,自定义输出对象属性的内容,实现打印对象的属性值,不打印地址。默认会打印对象的地址,是因为默认调用Object类型的toString()方法。
equals()方法
equals 和 ==的区别:
== 比较对象的地址的是否相同。equals如果子类中没有重写,默认调用Object类中的equals方法,比较的是地址,但是可以重写,自定义比较规则,按照内容比较对象是否相同。
多态
面向对象的三大特性之一------多态:一种事物的多种形态,多种表示形式。
多态的前提:
类的继承。接口的实现。
多态的最终体现:
父类的引用指向子类的对象。
多态的目的:
父类的引用在如果调用子父类中都有的方法,调用的是子类中重写的方法。子类的新增方法对父类引用不可见。
多态使用成员:
成员变量: 编译运行看父类。成员方法: 编译看父类|类型|左边,运行看子类|找对象|右边。
转型 cast
java是一门强类型的语言。
向上转型:(自动类型提升)
孔子装爹案例:
孔子类 class KongZi{int age=25;void teach(){论语};void play(){吃鸡}}
孔子爹类 class KongZiDie{int age=45;void teach(){做生意}}
有一个人来请孔子爹授课,孔子爹外出游玩,孔子化妆装成孔子爹 的样子去授课。
KongZiDie zi=new KongZi(); --化妆–>向上转型,小范围类型->子类,大范围类型–>父类
zi.teach(); 真实去的人是孔子,所以讲的还是论语。向下转型:(强制类型转换)
目的:和学生一起玩吃鸡,使用子类独有的功能。
卸妆: 从孔子爹类型变成孔子类型,大范围(父类)->小范围(子类)
小范围类型 引用=(小范围类型)大范围引用;
KongZi kong=(KongZi)zi;
kong.play();
经过向下转型变成子类应用,可以调用子类中新增的方法。
ClassCastException 类型转换异常
instanceof 运算符A instanceof B 判断A引用是否是B类型的对象|是否是B类型子类的对象,如果是返回true,如果不是返回false。编译的时候只检查A和B是否在一条继承连上。
抽象类
抽象类: abstract修饰的类就是抽象类。
抽象方法: 使用abstract关键修饰的方法为抽想法方法。
抽象方法的特点:
没有方法体
必须存在与抽象类中
注意:
抽象类不能实例化。(不能创建对象)抽象方法一定要存在抽象类中。抽象方法一定要被重写才能使用。抽象类中可以存在抽象方法,可以存在实例方法。使用抽象类中的内容:
需要通过子类
具体子类:重写抽象父类中的所有抽想方法+可以按需新增方法。
抽象子类:按需重写抽象方法+按需新增方法。一个抽象方法如果被重写过就不需要再次被重写了,但是也可以重写。abstract不能和private,final,static和native不能一起使用。