java-----权限修饰符,重写,super和final关键字,多态,转型和抽象类

权限修饰符

   java中4中修饰符分别为public、protect、default、private,他们这就说明了面向对象的封装性,所以我们要使用他们尽可能的让权限降到最低,从而安全性提高。(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况。)

权限修饰符 本类 同包类 不同包子类 不同包的其他类
private T F F F
default T T F F
protected T T T F
public T T T T

注意:

  1. 以上权限修饰符只能修饰成员(static也只能修饰成员),成员修饰符(成员变量|成员方法)。
  2. private的内容不能被继承,因为经过private修饰后表示私有的,所以不能被继承。
  3. 只有public和default能修饰类,并且default默认出现(也就是不写default,如果写了会报错)。
  4. protected的访问权限:
    • 1.同包下的类。
    • 2.不同包的子类,并且只能通过子父类关系访问,只有子类中才可以使用。

重写override

重写和重载之间的区别:

  1. 重写和重载都是指方法。
  2. 重载:
      1.同一个类中有多个方法。
      2.方法名字相同。
      3.参数列表不同|方法签名不同。
  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关键字

  1. super和this的区别:
    this 指代当前new的对象
    super 指代父类对象
    super用在构造器的首行调用父类中的构造器
  2. super的使用
    super(参数列表)
    必须要使用再首行,如果没有显示调用父类中其他构造器,默认调用父类空构造。
  3. super区分子父类中同名的成员
    如果不存在子父类中同名成员问题,可以省略,默认之类中的找子类,父类中的找父类。
    如果存在子父类中同名成员,并且想要调用父类中的成员,使用super表示父类对象,否则默认子类(就近原则)。
  • 创建对象是先父类后子类
  • 先静态后成员

final(关键字)最终的

  • final修饰变量为常量。
  • final修饰的方法不能被重写。
  • final修饰的类不能被继承(太监类)。
  • final修饰的是引用数据类型,对象的地址不能变,但是可以改变对象的成员。

Object类(老祖宗)

  object是java中所有类的根据类,java中的所有类都会直接或者间接的继承自Object类。
toString() 方法
  toString()是object的方法之一,当打印一个对象的引用时候,会默认调用对象的toString(),获得一个引用地址。但是一般打印一个对象,其实是想要看对象的所有属性的值,这时候就需要重写toString()方法,自定义输出对象属性的内容,实现打印对象的属性值,不打印地址。默认会打印对象的地址,是因为默认调用Object类型的toString()方法。
equals()方法
  equals 和 ==的区别:

  • == 比较对象的地址的是否相同。
  • equals如果子类中没有重写,默认调用Object类中的equals方法,比较的是地址,但是可以重写,自定义比较规则,按照内容比较对象是否相同。

多态

面向对象的三大特性之一------多态:一种事物的多种形态,多种表示形式。

多态的前提:

  1. 类的继承。
  2. 接口的实现。

多态的最终体现:
  父类的引用指向子类的对象。

多态的目的:

  1. 父类的引用在如果调用子父类中都有的方法,调用的是子类中重写的方法。
  2. 子类的新增方法对父类引用不可见。

多态使用成员:

  1. 成员变量: 编译运行看父类。
  2. 成员方法: 编译看父类|类型|左边,运行看子类|找对象|右边。

转型 cast

  java是一门强类型的语言。

  1. 向上转型:(自动类型提升)
      孔子装爹案例:
      孔子类 class KongZi{int age=25;void teach(){论语};void play(){吃鸡}}
      孔子爹类 class KongZiDie{int age=45;void teach(){做生意}}
      有一个人来请孔子爹授课,孔子爹外出游玩,孔子化妆装成孔子爹 的样子去授课。
      KongZiDie zi=new KongZi(); --化妆–>向上转型,小范围类型->子类,大范围类型–>父类
      zi.teach(); 真实去的人是孔子,所以讲的还是论语。
  2. 向下转型:(强制类型转换)
      目的:和学生一起玩吃鸡,使用子类独有的功能。
      卸妆: 从孔子爹类型变成孔子类型,大范围(父类)->小范围(子类)
      小范围类型 引用=(小范围类型)大范围引用;
      KongZi kong=(KongZi)zi;
      kong.play();
      经过向下转型变成子类应用,可以调用子类中新增的方法。

ClassCastException 类型转换异常

  • instanceof 运算符
  • A instanceof B 判断A引用是否是B类型的对象|是否是B类型子类的对象,如果是返回true,如果不是返回false。编译的时候只检查A和B是否在一条继承连上。

抽象类

  抽象类: abstract修饰的类就是抽象类。
  抽象方法: 使用abstract关键修饰的方法为抽想法方法。
  抽象方法的特点:
    没有方法体
    必须存在与抽象类中

注意:

  1. 抽象类不能实例化。(不能创建对象)
  2. 抽象方法一定要存在抽象类中。
  3. 抽象方法一定要被重写才能使用。
  4. 抽象类中可以存在抽象方法,可以存在实例方法。
  5. 使用抽象类中的内容:
      需要通过子类
      具体子类:重写抽象父类中的所有抽想方法+可以按需新增方法。
      抽象子类:按需重写抽象方法+按需新增方法。
  6. 一个抽象方法如果被重写过就不需要再次被重写了,但是也可以重写。
  7. abstract不能和private,final,static和native不能一起使用。

猜你喜欢

转载自blog.csdn.net/qq_41899248/article/details/90757646