【170天】黑马程序员27天视频学习笔记【Day08-下】

叨逼叨两句

成功自律一次(延迟满足)

08-(12-15):

方法重写的注意事项

  1. 父类中私有方法不能被重写(因为父类私有方法子类根本无法继承)
  2. 子类重写父类方法时,访问权限不能更低。(最好一致)
  3. 父类静态方法,子类也必须通过静态方法进行重写。(其实不算重写,但现象如此,多态会讲解)
  4. 子类重写父类声明最好一样。

override与overload的区别

  1. overload可以改变返回值类型,只看参数列表
  2. 方法重写:子类中出现了和父类中方法声明一模一样的方法,与返回值类型有关,返回值是一致或者是子父类。
  3. 方法重载:本类中出现的方法名一样,参数列表不同(个数、类型)的方法,与返回值类型无关。

08-(16-18):练习

package test_heima_08;

public class Test_Demo04 {
    public static void main(String[] args){
        Son s1 = new Son();
        s1.test();

    }
}

class Father{
    private String name = "apple";
    public String getName(){
        return name;
    }
}

class Son extends Father{
    public void test(){
        System.out.println(this.getName());//直接调用继承自父类的getName()
        System.out.println(getName());//这样写等同于上面的写法
        System.out.println(super.getName());//直接调用父类的getName()


    }
}

08-(19-21):final

final修饰特点

  1. 修饰类:类不能被继承。
  2. 修饰变量:变量变成常量,只能被赋值一次。
  3. 修饰方法:方法不能被重写

final关键字修饰局部变量

  1. 基本类型:值不能被改变
  2. 引用类型:地址值不能被改变,但是其指向的对象中的属性可以改变。
package test_heima_08;

public class Test_Demo05 {
    public static void main(String[] args){
        final Demo05 a = new Demo05(10,"aaa");
        //a = new Demo05(20,"bbb");
        a.setAge(200);
        System.out.println(a.getAge());
    
        final int b = 10;
        //b = 20;
        
    }
}

class Demo05{
    private int age;
    private String name;
    
    public Demo05(int age,String name){
        this.age = age;
        this.name = name;
    }
    
    public void setAge(int age){
        this.age = age;
    }
    
    public int getAge(){
        return age;
    }
    
}

final修饰变量的初始化时机

  1. 显示初始化
class Demo {
    final int num = 5;
    // final int num; //没有使用构造方法初始化,又这样不赋值,编译器会报错,final成员变量的默认初始值是无效值。
     public void print(){
        System.out.println(num);
    }
}
  1. 在对象构造完毕前
class Demo {
    final int num;
    
    public Demo(){
        num = 10;
    }
    
    public void print(){
        System.out.println(num);
    }
}

相关推荐