高校邦Java——6.2覆写
 关于this与super调用方法的区别
 1.使用this调用方法时,首先会通过本类进行查找,如果本类没有指定的方法存在,才会调用父类中定义的方法
 2.使用super调用方法时,会直接查找父类中的方法,即:不会找本类中定义过的方法
 覆写:当子类定义了与父类的方法名称相同、参数类型与个数相同、返回值相同的方法时,就称为发生了覆写。但是被覆写的方法不能拥有比父类更为严格的访问控制权限。
 public>default>private
 如果父类的方法使用的是private,那么子类无法覆写
 private定义的内容只能够在本类之中访问。那么在进行方法覆写的时候,如果子类定义的方法在父类之中的访问权限为private,那么子类是不能够进行覆写的。而子类即使按照覆写的要求编写方法,那么对于程序而言,也只是认为子类定义了一个新的操作,即private定义的方法无法被覆写
 结论:编写方法尽量用public进行定义
 class Person{
 public void tell(){System.out.println(“i’m a person”);}
 //↓也是被子类覆写
 //public void fun()
 //{this.tell();}
 }
 class Student extends Person{
 //此方法与父类中完全相同,覆写了tell方法
 public void tell(){
 //调用父类
//super.tell();
 System.out.println(“i’m a student”);}
 }
 public class personstudenttest {
 public static void main(String args[]){
 //实例化子类对象
 Student stu=new Student();
 stu.tell();
 }
 }一、super与this
 1.super调用的是父类的方法或属性,this调用的是本类的方法或属性
 2.super调用父类构造方法时必须要放在子类构造方法的首行,而this()调用本类构造方法时,也必须放在构造方法的首行,所以super和this不能同时出现
 3.this存在有一个表示当前对象的概念,而super没有这样的概念二、方法重载与方法覆写
 1.重载:在同一个类之中定义了方法名称相同,且参数的内容及个数不同的方法
 2.覆写:在继承关系之中,子类定义了与父类相同的方法名称、参数类型及个数、返回值。需要考虑权限问题,即:被覆写的方法不能拥有比父类更严格的访问控制权限。6.3 final
 不希望一个类被继承时可以使用final关键字
 final class A{}
 class B extengs A{} //提示错误
 ——————————————————————————
 class A{
 public final void fun(){}}
 class B extends A
 {public void fun()}//提示错误
 ——————————————————————————
 class A{
 //定义常量
 final int WARNING=10;
 public void fun()
 {//WARNING=20;}
 //报错:不能改变常量值
 常量定义使用大写字母,public statics定义的常量叫做全局常量6.4多态性
 对象的向上转型:父类名称 对象名称=子类实例化对象;(自动完成)
 对象的向下转型:子类名称 对象名称=(类名称 )父类对象;(强制完成)
 class A{fun();}
 class B extends A{fun();}
 A a=new B();
 a.fun();//实现的B里的fun();同一个对象根据实例化其子类的不同,同一个方法可以完成不同的功能
 class A{fun;}
 class B extends A{fun;}//覆写
 A a=new B();
 //实例化的是B里的fun向下转型:
 B b=(B) a;A a=new B();
 B b=(B) a;
 b.fun; //执行B类中的fun
 ——————————————————————————
 A a=new A(); //实例化父类对象
 B b=(B) a; //向下转型
 b.fun();
 报错。
 结论:在对象发生向下转型操作之前,一定要首先发生对象的向上转型建立好关系后才可以正常使用,关于对象撰写的实际使用情况:
 1.向上转型:90%,在大部分情况下使用的全部都是对象的向上转型
 2.向下转型:3%,很少会使用向下转型,因为只有在使用子类特殊功能的时候爱会考虑向下转型
 3.不转型:7%,String和其他一些有特殊功能的类
 A {fun();}
 B extends A{fun();funB();}
 A a=new B(); //向上转型
 a.fun();
 B b=(B) a; //向下转型
 a.funB(); //不加上面这行会报错关键字:instanceof,作用:判断某一个对象是否为某一个类的实例
 对象 instanceof 类 //返回boolean型数据
 a instanceof A