Java类与对象、类的继承

本文介绍了Java中的类与对象的概念,包括如何创建类和对象,以及类的继承机制。类作为对象的模板,定义了对象的属性和行为,而对象是类的具体实例。通过继承,子类可以扩展父类的功能,实现代码的重用和扩展。文章还讨论了转型的概念,包括向上转型和向下转型,以及它们在多态性中的作用。

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

目录

引言

一、理解现实生活中的类与对象

二、Java中的类与对象

1.类的创建

2.对象的创建

三、类的继承

1.代码实现继承

2.转型


引言

Java作为一门面向对象的编程语言,要理解其使用方法,首先需要清楚对象的概念。在Java中,对象是类的实例化表示,而类则是对象的模板。因此,类和对象在Java中密不可分,相互依存。

编程是为了解决现实生活中的问题,而编程语言则是对现实规律的抽象表达。要理解抽象的代码,必须首先明确代码所解决的现实问题,将问题转化为代码的逻辑结构。在Java中,类的设计和对象的创建都是为了模拟现实问题的特征和行为。

因此,对于Java的使用者而言,深刻理解对象的概念以及类与对象的关系是至关重要的。只有通过清晰的现实问题抽象和良好的类设计,才能编写出具有逻辑性和可维护性的代码。

一、理解现实生活中的类与对象

物以类聚,人以群分。这句中文俗语出自《周易·系辞上》,用于比喻同类的东西常聚在一起,志同道合的人相聚成群,反之就分开,是朋友之间门当户对、志同道合的统称。这句俗语就体现出了分类的思想,文学上不同的文学作品会被分为不同的类(小说、诗歌、散文等),生物界中的各种生物也被分为域、界、门、纲、目、科、属、种 (实质上也是类的范围的由大到小)。再往贴近我们生活的角度来说,供给我们营养的东西被称作食物,接收电能并将电能转化为其他能以实现目的的东西被称为电器,食物、电器这些都是比较大的类,实际又可以具体到小的类,比如新买回来的一袋苹果,这袋苹果就是一个类,家里面客厅和主卧侧卧装的空调也可以是一个类。类是抽象的,是人的主观将具有相同特征的事物放在一起组成的,客观上又不一定是绝对正确的。而对象是具体的不抽象的,现实生活中的对象客观的存在于这个世界上,比如你正在阅览我这篇文章所用的这台设备,或者是你手边的茶杯,这些都是具体存在于这个世界上的,有具体的重量,尺寸大小,以及它所具有的作用。

二、Java中的类与对象

在Java编程语言中,一切都是基于类的。类是用来描述对象的模板或蓝图,它定义了对象的属性(成员变量)和行为(方法)。在Java中,你可以创建多个类,并通过实例化类来创建对象,然后使用对象来调用类中定义的方法或访问类的成员变量。因此,Java程序是由一系列相互关联的类构成的。

1.类的创建

Java中用 class 关键字来声明新的类,给类中包含了相关的成员变量(属性)和方法(行为)类的创建如下:

class 类名{
    成员变量;
    方法;
}
class Person{//以人作为一个类
    String name;//成员变量:名字
    void readName(){//方法:输出名字
        System.out.println(name);
    }
}

2.对象的创建

对该类创建实例对象代码实现如下:

类名 对象名 = new 类名();
Person XiaoMing=new Person();//创建Person类的对象XiaoMing

简易完整代码如下:

public class Person{//以人作为一个类
    public static void main(String[] args){
        Person XiaoMing=new Person();//创建Person类的对象XiaoMing
        XiaoMing.name="小明";//修改成员变量:赋值
        XiaoMing.readName();//使用方法:执行对象行为
    }
    String name;//成员变量:名字
    void readName(){//方法:输出名字
        System.out.println(name);
    }
}

输出结果:

 值得注意的是在一个(.java)文件中只能出现一个public关键字修饰的类(主类),且该类名必须与文件名相同。

三、类的继承

前文在谈论现实的类与对象中,提及了食物与苹果以及电器与空调这种大类包含小类的情况,食物(大类)与苹果(小类)直接也具有共同的属性,如含有营养成分,电器(大类)和空调(小类)也有共同的行为,如需要外界供给电能消耗以实现相应功能,这种继承关系可以看作是小类拥有和大类相同的特性。在Java中,继承是一种强大的机制,它使得代码更具有组织性、重用性和扩展性。

1.代码实现继承

Java中继承的关键字是 extends 。创建一个新的类Boy,示例如下:

//public class 子类名(派生类) extends 父类名(基类,超类){
// }
public class Boy extends Person{//创建子类Boy继承父类Person的属性和行为
}

修改main函数,在main函数中创建Boy类的对象:

public static void main(String[] args){
        Boy XiaoJun=new Boy();//创建Person类的对象XiaoMing
        XiaoJun.name="小军";//修改成员变量:赋值
        XiaoJun.readName();//使用方法:执行对象行为
    }

输出结果如下:

可以发现,新的类Boy中没有定义任何成员变量和方法,但是具有Person类的成员变量和方法。通过继承,(同包下)子类可以获得父类的特征和行为。另外在子类中也可以定义特定的属性和方法,或者重写父类中已有的方法以改变其行为。方法重写(覆盖)存在于有继承关系的类之间,并且要求访问修饰符大于等于父类,返回值类型,方法名,参数类型(个数,顺序)完全一样。

定义新属性和新方法与重写父类中已有方法:

public class Boy extends Person{//创建子类Boy继承父类Person的属性和行为
    int height;//新属性
    public void readHeight(){//新方法
        System.out.println("身高为"+height+"cm");
    }
    void readName(){//重写方法
        System.out.println("我的名字叫"+name);
    }
}
public static void main(String[] args){
        Boy XiaoJun=new Boy();//创建Person类的对象XiaoMing
        XiaoJun.name="小军";//修改成员变量:赋值
        XiaoJun.readName();//使用方法:执行对象行为
        XiaoJun.height=180;
        XiaoJun.readHeight();
    }

输出结果为:

在Boy类中我们重写了Person类中的readName方法,在执行方法时就只执行重写的方法。若想保留父类中被重写的方法,可用关键字super表示当前类的父类对象,只需在重写的方法中加入“super.方法名;”即可执行父类中的同名方法。

注意,每个类都会默认继承Object类。每个子类只能继承一个父类,但是子类继承父类后同样可以添加接口(接口可以添加多个),格式如下: 

public class 子类(派生类) extends 父类(基类,超类) implements 接口,接口,... ,... {}

2.转型

一般情况下创建已知类的实体对象如上面已经提到过的:类名 对象名 = new 类名();

我们也可以通过继承的特性来实现转型这一作用,例如:

//父类名 对象名 = new 子类名();
Person XiaoJun=new Boy();

这一过程称作自动转型(向上转型)是指将子类对象转换为父类对象的过程,如果直接将以上转型替换原有XiaoJun对象的创建,会发现Boy类中特有的属性赋值和方法使用时会报错,而改写Person类中的readName方法却能实现,因此得出对象自动转型后只能调用子类中重写的方法。

若此时再把对象XiaoJun强制转型成为Person类的对象,操作如下:

//类名 新对象名 = (与等号左边相同类名)经过自动转型后的对象名
Boy XiaoMing=(Boy)XiaoJun; 

该操作叫做强制转型(向下转型)是指将父类对象转换为子类对象的过程,经过强制转型后得到的XiaoMing对象功能上与直接创建(Boy XiaoMing = new Boy();)的对象无异。

通过向上转型,从而实现多态性。这种转型的作用是可以将不同子类的对象都当作父类对象来处理,以简化代码和提高代码的可复用性。在向上转型后,只能访问父类中定义的方法和成员变量,而子类特有的方法和成员变量将无法直接访问。

通过向下转型,以便访问子类特有的方法和成员变量。这种转型的作用是在某些特定的情况下,当我们确定一个父类对象实际上是某个子类的对象时,可以使用向下转型来恢复原本的子类类型,从而可以调用子类特有的功能。

继承关系的转型可以在处理多态性、简化代码和使用子类特有功能等方面提供灵活性和便利性。但在使用转型时,需要注意类型安全性和合理性,避免出现编译时或运行时的错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J_Silver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值