鱼C论坛

 找回密码
 立即注册
查看: 3064|回复: 2

[学习笔记] Java-006继承

[复制链接]
发表于 2018-12-21 20:45:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

        class 子类 extends 父类 {
        }

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

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:常见的给值
                        定义的时候。(推荐)
                        构造方法中。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 09:35:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 11:03:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表