moc 发表于 2018-12-21 20:45:59

Java-006继承

1、基本概念
继承:是类与类之间的关系,可以理解为一个类从另一个类获取方法和属性的过程。
格式:
        class 父类 {
        }

        class 子类 extends 父类 {
        }
继承关键字:
extends, 所有的类都直接或间接继承于 java.lang.Object,当一个类没有继承,则默认继承object(在 java.lang 包中,不需要 import)祖先类。
继承类型:

2、super 与 this 关键字
super: => 用来引用当前对象的父类。
this:    => 指向自己的引用。
public class Demo{
    public static void main(String[] args) {
      Dog obj = new Dog("花花", 3);
      obj.say();
    }
}
class Animal{
    String name;
    public Animal(String name){
      this.name = name;
    }
}
class Dog extends Animal{
    int age;
    public Dog(String name, int age){
      super(name);
      this.age = age;
    }
    public void say(){
      System.out.println("我是一只可爱的小狗,我的名字叫" + name + ",我" + age + "岁了");
    }
}注意:   无论是 super() 还是 this(),都必须放在构造方法的第一行。
        ① 在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
        ② 不能在构造方法以外的任何方法内调用构造方法。
        ③ 在一个构造方法内只能调用一个构造方法。
        ④ 如果编写一个构造方法,既没有调用 super() 也没有调用 this(),编译器会自动插入一个调用到父类构造方法中,而且不带参数。
super 与 this 的区别:
        super 不是一个对象的引用,不能将 super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
3、重写
重写:在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。
重写后,被覆盖的方法在子类中只能通过super调用。
public class Demo{
    public static void main(String[] args) {
      Dog myDog = new Dog("花花");
      myDog.say();// 子类的实例调用子类中的方法
      
      Animal myAnmial = new Animal("贝贝");
      myAnmial.say();// 父类的实例调用父类中的方法
    }
}
class Animal{
    String name;
    public Animal(String name){
      this.name = name;
    }
   
    public void say(){
      System.out.println("我是一只小动物,我的名字叫" + name + ",我会发出叫声");
    }
}
class Dog extends Animal{
    // 构造方法不能被继承,通过super()调用
    public Dog(String name){
      super(name);
    }
    // 覆盖say() 方法
    public void say(){
      System.out.println("我是一只小狗,我的名字叫" + name + ",我会发出汪汪的叫声");
    }
}方法重写的原则:
        ① 覆盖方法的返回类型、方法名称、参数列表必须与原方法的相同。
        ② 覆盖方法不能比原方法访问性差(即访问权限不允许缩小)。
        ③ 覆盖方法不能比原方法抛出更多的异常。
        ④ 被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
        ⑤ 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
        ⑥ 被覆盖的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
3、final关键字
(1)是最终的意思,可以修饰类,方法,变量。
(2)特点:
        A:它修饰的类,不能被继承。
        B:它修饰的方法,不能被重写。
        C:它修饰的变量,是一个常量。
(3)相关:
        A:局部变量
                a:基本类型 值不能发生改变
                b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的
        B:初始化时机
                a:只能初始化一次。
                b:常见的给值
                        定义的时候。(推荐)
                        构造方法中。

syx2461859199 发表于 2018-12-27 09:35:07

{:10_254:}

zwhe 发表于 2020-6-5 11:03:39

{:10_279:}
页: [1]
查看完整版本: Java-006继承