java--重写 final (课堂笔记)

时间:2022-09-20 08:47:28


 

publicclass Father {

 publicstaticintage;

 

 public Father(){}

 

 public Father(intage){

  this.age = age;

 }

 

 publicstaticint getAge(){

  System.out.println("father getAge");

  returnage;

 }

 

 publicvoid mether(){

  System.out.println("我有车");

 }

 

 

 publicvoid method2(inta, Stringb){

  System.out.println("Father.method2()");

 }

 

 publicint method3(){

  System.out.println("Father.method3()");

  return 1;

 }

 

 

 public String method5(){

  System.out.println("Father.method5()");

  return"";

 }

 

 public Father method4(){

  System.out.println("Father.method4()");

  returnthis;

 }

 

 publicvoid method6(Fatherf){

  System.out.println("Father.method6()");

 }

 

 

 

 privatevoidmethod7(){

  System.out.println("Father.method7()");

 }

 

 publicvoid method8(){

  System.out.println("Father.method8()");

 }

 

 

 

 

}

 

 

package com.lijie.lianxi5;

 

publicclass Sonextends Father{

 /*public Son(){

  super(age);

 }*/

 public Stringname;

 

 //重写

 //重写,在继承了父类的基础上,需要拓展其他功能,就用重写

 //@Override //注解, 这个注解的意思,如果这个方法是重写父类的方法,就不会报错 

 @Override

 publicvoid mether(){ //重写,在继承了父类的基础上,需要拓展其他功能,就用重写

  super.mether();//这是调用父类中的功能

  System.out.println("我还有飞机");//子类新增的功能

 }

 

 publicstaticvoid method100(){

  System.out.println(Father.getAge());//使用父类名.方法访问

 }

 

 //1、如果子类中方法名字跟父类中方法名字不一样,不算重写

 

 

 //2、如果子类中方法名字跟父类中方法名字一样,但是参数列表不一样时(个数, 类型,顺序)不算重写

 //@Override

 /*public void method2(String a,int b){

  System.out.println("Son.method2()");

 }*/

 

 //不算重写

 /*public void method6(Son s){

  System.out.println("Son.method6()");

 }

 

 public voidmethod6(Father s){

  System.out.println("Son.method6()");

 }*/

 

 //3、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,

 //但是反回值是基本类型,且类型不一样时,不算重写

 /*@Override

 public double method3(){

  System.out.println("Son.method3()");

  return 1.0d;

 }*/

 

 //4、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,

 //但是反回值是引用类型,且类型不一样(且没有任何关系)时,不算重写

 /*@Override

 public Son method5(){

  System.out.println("Son.method5()");

  return new Son();

 }*/

 

 //5、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,

 //但是反回值是引用类型,但是,反回值间类型存在子父类关系,算重写

 @Override

 public Son method4(){  //这个引用类型的返回值有继承关系

  System.out.println("Son.method4()");

  returnnew Son();

 }

 

 // 6、父类中使用private修饰的方法,子类无法进行重写,如果子类中定义一个跟

 //父类一样的方法(修饰 返回值 方法名 参数列表都一样), 不算重写,算子类新定义的

 // private方法

 /*@Override

 private void method7(){

  System.out.println("Son.method7()");

 }*/

 

 // 7、子类中如果有一个方法,跟父类除修饰符以外,其他的(返回值 方法名 参数列表)一样

 //如果子类的修饰符权限大于或等于父类的修饰符权限,算方法重写 ,如果小于不算

 //【父类的修饰符不能是private

 /*@Override

 public void method8(){

  System.out.println("Son.method8()");

 }*/

 

 //8、子类方法抛出异常必须少于或者等于父类抛出的异常

 

 publicstaticvoid main(String[]args) {

  Son son =new Son();

  son.mether();

 }

 

 //The method getAge() of type Son must override or implement a

 //supertype method

 

 //@Override

 /*public staticint getAge(){//静态方法无法重写

  return 1;

 }*/

 

}

 

 

 

package com.lijie.lianxi5;

 

publicclass Final {

 

 //--------------------基本类型------------------------------

  //The blank final field age may not have beeninitialized

  //要么直接给具体的值,要么在构造方法中赋值

  //知识1final修饰的属性,无法一旦赋值成功,则无法改变

  //public staticint age =1;

  

  ///知识点2:在构造方法中进行赋值

  //public staticint age;

  

  /*public Final (int age ){

   * this.age = age;

   * }

   

  */

  

  //错误的,原因:没有对fianl进行赋值

  /*public FinalTest(){

   

  }*/

 

 //--------------------引用类型------------------------------

  publicfinal Sonson;

  //知识点3:引用类型赋值之后,无法进行改变,但是,引用类型的属性值是可以改变

  public Final(Sonson){//构造方法---->>类名(){}

    this.son = son;

  }

  publicstaticvoid main(String []args){

 

    Son son1 =new Son();  //创建一个Son类型的名为son1的空间

    son1.name ="张三";  //name调用Son里的name属性

   

    Final final1 =new Final(son1);

    System.out.println(final1.son.name);

   

    //Son son2 = new Son();

    //不可以:The final fieldFinalTest.son cannot be assigned

    //finalTest.sonfinal修饰

    //finalTest.son = son2;

   

    final1.son.name = "李四";//可以将里面的属性“值”改掉,但是,改不了属性,就是说不能改掉son

    System.out.println(final1.son.name);

   

   

  }

  

  

 

 

}