鱼C论坛

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

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 09:35:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 11:03:39 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-18 08:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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