Java面向对象三大特征-继承介绍与运用,super关键字

Java面向对象三大特征-继承

  1. 概念

    继承是面向对象程序设计不可缺少的设计思想,是实现代码可重用的根基,是提高代码可扩展性的主要途径.

    继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力.

    注意:

    1. 在Java中使用extends关键字来表示继承关系.
    2. Java不支持多继承,单继承是Java的继承关系很简单,一个类只能有一个直接父类.
    3. 继承之后子类可以调用父类的所有非私有属性和私有方法.
  2. 何时用

    符合is-a关系的设计

    例如:猫是动物 ,狗是动物.

    猫和狗都拥有一些动物相同属性,比如吃,走等.

    如果单独把猫狗分类会增加代码的重复,这时利用继承可以把一些非私有的相同属性定义,在动物这个基类/父类的基础上,派生出猫和狗新的类,这些新类可以拥有父类非私有属性和非私有方法,并且加以扩展出一些自己独有的属性方法.这样就提高了代码的可重用性和可扩展性.

  3. 语法

    继承的形式:[访问权限修饰符] [修饰符] 子类名 extends 父类名{子类体}

    例如:

    public class Animal extends Object{//定义父类Animal,其实Animal也是默认继承object父类的,不显示
        public void eat(){
            System.out.println("动物吃");
        }
    }
    
    public class Dog extends  Animal{//子类Dog继承父类Animal,拥有Animal非私有属性和非私有方法
    }
    public static void main(String[] args){
        Dog dog = new Dog();//创建dog对象
        dog.eat();//dog子类调用父类Animal的eat()方法
    }
    

    专业术语

    Dog类是 Animal类的子类, Animal类是Dog类的父类

    Dog类是 Animal类的派生类, Animal类是Dog类的基类

  4. 继承的传递性

    C类从B类继承,B类又从A类继承

    那么C类就具有B类和A类的所有非私有属性和非私有方法

    当一个没有继承任何一个类时,jvm会默认让类继承Object类

    Object是 java为所有类提供的基类

  5. 继承中的构造方法

    子类构造方法总是先调用父类构造方法,默认情况下,调用父类无参构造方法.

    public class Animal extends Object{
        public Animal(){
            System.out.println("Animal无参构造方法");
        }
    }
    
    public class Dog extends Animal {
    
        public Dog(){
            super();//默认在构造方法第一行使用super调用父类构造方法,没有显式的声明,默认在第一行,显示调用也必须在第一行
            System.out.println("Dog无参构造方法");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            new Dog();//在创建子类对象时会默认调用父类的无参构造方法的创建父类对象,而且是先调用父类构造方法
        }
    }
    /*结果:
    Animal无参构造方法
    Dog无参构造方法
    */
    

    可以在子类构造方法的第一行,使用super关键字调用父类任意

    一个构造方法.

    例如:

    public class Animal extends Object{
         String name;
         int age;
        public Animal(){
            System.out.println("Animal无参构造方法");
        }
        public Animal(String name,int age){
            System.out.println("Animal有参构造方法");
        }
    }
    
    public class Dog extends Animal {
    
        public Dog(){
            super("哈哈",3);//显式的调用了父类中有参构造方法
            System.out.println("Dog无参构造方法");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Dog dog = new Dog();
        }
    }
    /*
    结果
    Animal有参构造方法
    Dog无参构造方法
    

    如果用super,必须写在方法的第一句.

    如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法.

    原因:子类创建后需要调用父类的方法,所以在创建子类对象时父类也需要同时被创建.

  6. super关键字用途

    super关键字代表父类的引用,在程序中主要的用途

    1. 在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行.
    2. 用**“super.成员变量名”**来引用父类成员变量.
    3. 用**“super.方法名(参数列表)”**的方式访问父类的方法.
    4. 与this的区别,this通常指代当前对象,super通常指代父类.
  7. 方法的重写

    在子类中可以根据需要对从父类中继承来的方法进行重写.

    方法重写规则

    1. 方法名相同,参数列表相同

    2. 返回值类型相同

    3. 访问权限相同

    4. 即与父类方法结构完全相同

      注意:构造方法不能重写

    应用场景

    当父类的方法实现不能满足子类需求时,可以对方法进行重写.

    例如:

    public class Animal extends Object{//Animal为父类
         public void eat(){
             System.out.println("吃");
         }
    }
    
    @Override//java注解,是java中事先定义好的注解标签
        //@Override作用在类,属性,方法上,用于标记,运行时/编译时进行解析检测
        /**
         * 重写:在子类中可以根据需求对从基类中继承来的方法进行重写
         * 当父类的方法实现不能满足子类需求是,可以将父类中定义好的功能方法重写过来
         */
        public void eat() {
            System.out.println("狗");
            super.eat();//重用父类方法,即System.out.println("吃");
        }
    
    public class Test {
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.eat();
        }
    }
    /*
    结果
    狗
    吃
    */
    
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值