java的面向对象基础(2) —— 继承

本文深入探讨了Java中的继承概念,包括extends关键字、super的使用、继承的属性和方法权限,以及方法重写Override。通过实例展示了Object类的toString()和equals()方法的重写,强调了继承在代码重用和抽象层次上的意义,并以简单工厂模式为例展示了继承的应用。
摘要由CSDN通过智能技术生成

师承陈立臣

背景

下面C语言的代码中定义了两个在内容上高度重复的结构体

#include <stdio.h>

struct Person  //人
{
   
	int name;
	char* address;
	void (*pEat)();
	void (*pDrink)();
};

struct Student //学生也是人,所以有一定的重复性
{
                
	int name;
	char* address;
	void (*pEat)();
	void (*pDrink)();

	int score; //学生独有的特征,有分数,要上学
	void (*goToSchool)();
};

然而对于C语言来说这两个结构体没有任何联系,这样造成了代码的浪费,重复。

而java的继承特性,就解决了这一问题。

继承的概念和实现

生活中,继承的概念随处可见。

比如:

在这里插入图片描述

java继承背后的思想是:基于已存在的类来构建新类。

当从已存在类继承时,就重用了他的方法和属性,还可以添加新的方法和属性来定制新类以应对要求。

继承的意义:代码重用,体现不同抽象层次

约定:从其他类导出的类叫做子类,通常父类更通用更抽象,子类更特殊更具体。在java中,除了object外,所有类都是子类,都只有唯一的父类,即为object。

所以继承在OOP(Object-Oriented Program面向对象编程 )中不可或缺,创建一个类时,总是在继承

extends关键字

在java语言中,用extends关键字来表示一个类继承了另一个类,如Student继承了Person

public class Student extends Person{
   
...
}

例子:

class Person {
   
    String name;
    String address;

    void eat() {
   
        System.out.println("人吃饭");
    }
    void drink() {
   
        System.out.println("人喝水");
    }
}

class Student extends Person{
    //可以直接使用Person中的属性了
    int score;
    void goToSchool() {
   
        System.out.println("学生要上学");
    }
}

public class Demo1 {
   
    public static void main(String[] args) {
   
        Person p = new Person();
        p.name = "人";
        p.eat();

        Student s = new Student();
        s.name = "学生";  //person中的特征
        s.eat();         //person中的方法
    }
}

super关键字

super和this关键字的特点类似:super代表的是对父类对象的引用

作用:

(1)当子父类的成员出现同名时,可以通过super来区分
(2)子类的构造方法中,通过super关键字调用父亲的构造方法

强调:

(1)当构造一个子类对象的时候一定会先调用父类的构造方法来构造父类的对象。
(2)调用父类构造方法的语句必须是子类构造方法中的第一条指令

例子:

class Person {
   
    String name;
    String address;

    void eat() {
   
        System.out.println("人吃饭");
    }
    void drink() {
   
        System.out.println("人喝水");
    }

    //Person(){}//解决方法一:无参的构造方法
    Person(String name,String address){
   
        this.name = name;
        this.address = address;
        System.out.println("父类构造方法被调用");
    }
}

class Student extends Person{
    //可以直接使用Person中的属性了
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值