网站首页 > java教程 正文
今天我们开始学习有关Java继承的知识。
文章主要内容:
- 了解继承在java中有什么作用
- 继承的优缺点
- 在代码上如何实现继承
Java继承定义
继承是面向对象三大特征之一,封装居首位,封装之后形成了独立体,独立体A和独立体B之间可能存在继承关系。其实程序中的继承灵感来自于现实生活,在现实生活中继承处处可见,例如,儿子继承了父亲的财产,儿子不需要努力就很有钱。
生活中的继承:
继承时子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性,或子类从父类继承方法,使得子类具有与父类相同的行为。
兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:is-a(Bird is-a Animal),父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
为什么要使用继承机制?在不同的类中也可能会有共同的特征和动作,可以把这些共同的特征和动作放在一个类中,让其它类共享。因此可以定义一个通用类,然后将其扩展为其它多个特定类,这些特定类继承通用类中的特征和动作。
继承是 Java 中实现软件重用的重要手段,避免重复,易于维护。
Java如何继承
java中继承的语法格式:
class 类名 extends 父类名{
类体;
}
1.2.3.4.5.6.
为什么需要继承,接下来我们用以下这个需求来说明一下:
public class Account { //银行账户类
//账号
private String actno;
//余额
private double balance;
//账号和余额的set和get方法
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
public class CreditAccount { //信用账户类
//账号
private String actno;
//余额
private double balance;
//账号和余额的set和get方法
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
//信誉度(特有属性)
private double credit;
//信誉度的set和get方法
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.
以上两个类分别描述了“银行账户类”和“信用账户类”,信用账户类除了具有银行账户类的特征之外还有自己的特性,按照以上代码的编写方式,程序将会非常的臃肿,我们将上面的程序修改为继承方式,请看代码:
public class Account { //银行账户类
//账号
private String actno;
//余额
private double balance;
//账号和余额的set和get方法
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
public class CreditAccount extends Account{ //信用账户类
//信誉度(特有属性)
private double credit;
//信誉度的set和get方法
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
1.2.3.4.5.6.7.8.9.10.11.
public class AccountTest {
public static void main(String[] args) {
CreditAccount act = new CreditAccount();
act.setActno("111111111");
act.setBalance(9000.0);
System.out.println(act.getActno() + "信用账户,余额" + act.getBalance() + "元");
}
}
1.2.3.4.5.6.7.8.
运行结果如下图所示:
通过以上的代码,我们可以看到继承是可以解决代码臃肿问题的,换句话说,继承解决了代码复用的问题,但这其实并不是继承最重要的作用,继承最重要的作用是:有了继承才有了方法覆盖和多态(后续的课程中详细讲解)。
继承有哪些特性呢?以下内容需要记忆:
● B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
● java中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是java体现简单性的一点,换句话说,java中不允许这样写代码:class B extends A,C{ }。
● 虽然java中不支持多继承,但有的时候会产生间接继承的效果,例如:class C extends B,class B extends A,也就是说,C直接继承B,其实C还间接继承A。
● java中规定,子类继承父类,除构造方法和被private修饰的数据不能继承外,剩下都可以继承。
● java中的类没有显示的继承任何类,则默认继承Object类,Object类是java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有Object类型中所有的特征。
● 继承也存在一些缺点,例如:CreditAccount类继承Account类会导致它们之间的耦合度非常高,Account类发生改变之后会马上影响到CreditAccount类。
接下来我们来测试一下从Object类中继承过来的方法,先来看一下Object类的部分源代码:
我们来尝试调用这个方法,请看代码以及执行结果:
public class ExtendsTest{
public static void main(String[] args) {
ExtendsTest et = new ExtendsTest();
String s = et.toString();
System.out.println(s);
}
}
1.2.3.4.5.6.7.
运行结果如下图所示:
虽然输出结果看不懂,但是起码看到这个字符串当中确实是有一个“@”符号的,toString()方法确实被ExtendsTest类继承过来了。
- 上一篇: 一篇文章带你了解Java继承那些事儿
- 下一篇: java4个技巧:从继承和覆盖,到最终的类和方法
猜你喜欢
- 2024-10-03 Java中的继承关系(java中的继承关系是)
- 2024-10-03 Java面向对象之继承(java面向对象继承例题)
- 2024-10-03 「Java入门」十八 面向对象的三大特征之一-继承
- 2024-10-03 [Java基础]09.继承(java基础案例教程第二版)
- 2024-10-03 Java中的继承、封装、多态 #Java开发
- 2024-10-03 Java中的继承与组合(java中继承的概念以及使用继承的好处)
- 2024-10-03 《极简Java新手编程之道》8.1.1 Java语言中实现继承
- 2024-10-03 Java:类与继承(java类与继承抽象类)
- 2024-10-03 Java基础——面对对象-继承(面对对象的特征有哪些方面java基本数据类型有哪些)
- 2024-10-03 你真的熟悉Java中的继承与多态?给你几分钟能回答上来?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)