Java基础——面向对象特征继承

本文深入探讨Java中的继承概念,包括extends关键字的使用,方法重写与重载的区别,super关键字的功能,以及多态的定义和应用。通过具体代码示例,详细解释了子类如何继承父类的属性和方法,以及如何实现方法的重写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java继承

继承的概念

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

在这里插入图片描述

extends关键字

1)通过extends关键字可以实现类的继承
2)子类(sub class)可以继承父类(Super class)的成员变量和成员方法,同时也可以定义自己的成员变量和成员方法。
3)Java语言不支持多重继承,一个类只能继承一个父类,但一个父类可以有多个子类

方法重写和方法重载的区别:
/**
 * 方法重写和方法在重载:
 * 重写和重载的格式基本相同,都是方法名相同,
 * 重写和重载的区别:
 * 1)方法重写发生载同一个类里面,方法重载发生在子类和父类两个类中
 * 2)方法重写需要方法名相同而参数列表不同,返回值类型、权限修饰符可以相同也可不同;
 *     而方法的重载方法名相同参数列表相同,返回值类型相同,权限修饰符父类大于或等于子类;
 */
重写中使用super关键字

子类在重写父类的方法是,可以通过super关键字调用父类的版本,super.f,这样的语法通常用于子类重写方法在父类方法的基础之上进行功能扩展。

父类的对象指向子类的引用
在这里插入图片描述

代码:
package extends0;

public class Super0 {
    //Super类的成员属性
    public int value;
    public String fathername="玉皇大帝";
    public int age;
    private String gender="男";//假设玉皇大帝只能生男孩
    public void f(){
        System.out.println("这是父类的f方法");
    }
    public String setGender(String gender){
        return gender;
    }

    public String getGender(){
        return gender;
    }

    //Super类的成员方法
    public void playChild(){
        System.out.println("爸爸可以打孩子哦!");
    }

    public void somking(){
        System.out.println("爸爸可以掌管太上老君哦!");
    }
}

******************************Java文件分界线**********************************
package extends0;

public class Child1 extends Super0 {
    public int num;//子类不加权限修饰符默认为私有的private

    public void g(){
        System.out.println("这是子类的g方法");
    }
    /**
     * extends关键字:
     * 1) 子类继承父类可通过extends关键字继承
     * 2) 子类可以通过extends关键字继承父类的成员便改良和成员方法,
     * 能够改变父类的成员变量的值和成员方法,改变父类成员方法的行为叫做方法的重写
     * 也可自己定义父类没有成员变量和成员方法,
     * 3)继承只能单向传递,一个子类不能有多个父类,而一个父类可以有多个子类。
     *    "class not extend mutiply class"
     */

    /**
     * 父类playaChila方法的重写
     */
    @Override
    public void playChild() {
        System.out.println("爸爸最好不要打孩子");
        super.playChild();
    }
    /**
     * super关键字的使用:
     * super是子类重写父类方法是出现的关键字,通过super.fatherMethod()方法可以
     *  调用父类方法的模板,在子类方法重写父类方法的时候,用到super关键字就相当于
     *  子类对父类方法的扩展。
     *
     */

    public void sum(){
        System.out.println("成绩和为:100");
    }

    private void sum(int a){
        System.out.println("输入进来的值为:"+a);
    }

    /**
     * 方法重写和方法在重载:
     * 重写和重载的格式基本相同,都是方法名相同,
     * 重写和重载的区别:
     * 1)方法重写发生载同一个类里面,方法重载发生在子类和父类两个类中
     * 2)方法重写需要方法名相同而参数列表不同,返回值类型、权限修饰符可以相同也可不同;
     *     而方法的重载方法名相同参数列表相同,返回值类型相同,权限修饰符父类大于或等于子类;
     */
}
******************************Java文件分界线**********************************
package extends0;

public class Child extends Super0 {
    public Child(){

    }
}
******************************Java文件分界线**********************************
package extends0.test;

import extends0.Child1;
import extends0.Super0;

public class T1 {
    public static void main(String[] args) {
        //创建子类对象
        Child1 child1 = new Child1();
        //访问子类继承的性别值
        System.out.println(child1.getGender());
        //调用子类重写父类的playchild()方法
        child1.playChild();
    }
}

******************************Java文件分界线**********************************
package extends0.test;

import extends0.Child;
import extends0.Child1;
import extends0.Super0;
import org.junit.Test;

public class T2 {
    /**
     * 测试父类的引用指向子类的对象
     */
    @Test
    public void t1(){
        Super0 child1 = new Child1();
        System.out.println(child1.fathername);
    }

    @Test
    public void t2(){
        /**
         * 上转型对象:
         * 把子类对象赋值给父类的应用叫做上转型对象
         */
        Super0 super0 = new Super0();

        Super0 child = new Child();
        Super0 child1 = new Child1();
        Super0 child2 = new Child2();
        /**
         * 类多态的定义:
         * 一个类有多个子类的形式叫做类的多态,多态是是一个类被很多个类继承
         */

        super0.value=1;
        super0.f();
//        child1.num=9;//父类的引用对象指向子类
//        child1.g();
        /**
         * 父类的引用对象指向子类: 在上转型对象中,子类自己特有的成员变量和方法不能通过创建的对象来调用
         * 否则会出现  can't resolve symbol  错误
         */
    }
}
******************************Java文件分界线**********************************
package extends0.test;

import extends0.Super0;

public class Child2 extends Super0 {}
多态

一个父类的拥有多个子类的表现叫做多态;
我们可以把同一个类拥有不同的子类的这个过程叫做多态,

  • 也就是,一个类拥有多个子类的表现形式,具体功能
  • 主要是看子类,因为子类重写了父类的方法,父类的
  • 不同子类所重写的父类的方法的逻辑不一样导致,方法的
  • 运行结果不一样,运行结果不一样就表示该类的子类对象
  • 可以扮演不同的角色,这就是多态的运用。
    */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值