下一篇持续更新中… 如有错误欢迎指正!!!
继承基础语法
- 继承是面向对象三大特征之一。三大特征分别是:封装、继承、多态
- 继承 “ 基本 ” 的作用是:代码复用,但是继承最 “ 重要 ” 的作用是:有了继承,才有了以后的 “ 方法的覆盖 ” 和 “ 多态机制 ”
- 继承语法格式:
[修饰符列表] class 类名 extends 父类名{
类体 = 属性 + 方法
}
- Java语言当中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类,在C++中支持多继承
- 关于继承中的一些术语:
B类继承A类,其中:- A类称为:父类、基类、超类、superclass
- B类称为:子类、派生类、subclass
- 在Java语言当中,子类继承父类都继承哪些数据呢?
- 私有的不支持继承
- 构造方法不支持继承
- 其他数据都可以被继承
- 虽然Java语言当中只支持单继承,但是一个类也可以间接继承其他类,例如:
C类直接继承B类,但是C类间接继承T、A类。
C extends B{
}
B extends A{
}
A extends T{
}
- java语言中假设一个类没有显式的继承任何类,该类默认继承JavaSE库当中提供的java.lang.Object 类。Java语言中任何一个类都有Object类的特征。
测试
Account类
public class Account{
private String actno;
private double balance;
public Account() {
}
public Account(String actno, double balance) {
this.actno = actno;
this.balance = balance;
}
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;
}
}
CreditAccount类
旧版写法
利用之前学习的知识编写
public class CreditAccount{
private String actno;
private double balance;
private double credit;
public CreditAccount() {
}
public CreditAccount(String actno, double balance, double credit) {
this.actno = actno;
this.balance = balance;
this.credit = credit;
}
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;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
新版写法
CreditAccount类中很大一部分代码都和Account类中的代码重复,利用新学的知识点编写
public class CreditAccount extends Account{
private double credit;
public CreditAccount() {
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
测试类
public class ExtendsTest{
public static void main(String[] args){
ExtendsTest et = new ExtendsTest();
String s = et.toString();//这里编译通过了,这说明可以调用toString方法,ExtendsTest类中有toString方法,从object类中继承过来的。
System.out.println(s);//com.sypowermode.javase.day09.test004.ExtendsTest@368102c8
CreditAccount act = new CreditAccount();
act.setActno("act-01");
act.setBalance(-1000.0);
act.setCredit(0.99);
//私有的不能继承,CreditAccount继承Account不能继承私有的东西。setActno和setBalance调用的是公开的方法,间接的访问actno
System.out.println(act.getActno() + "," + act.getBalance() + "," + act.getCredit());
}
}
拓展一个栗子 :
public class ExtendsTest2{
public static void main(String[] args){
C c = new C();
c.doSome();//这里调用的doSome方法是从B类中继承过来的doSome方法
}
}
class A{
public void doSome(){
System.out.println("do some!");
}
}
class B extends A{
public void doSome(){
System.out.println("do some!");
}
}
class C extends B{
public void doSome(){
System.out.println("do some!");
}
}