因为了有了继承机制,才有了后期的方法覆盖和多态。
B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
class A{
?
}
?
class B extends A{
?
}
Java中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是java体现简单性的一点,换句话说,java中不允许这样写代码: class B extends A,C{ }。
虽然Java中不支持多继承,但有的时候会产生间接继承的效果,例如:
class A{
?
}
class B extends A{
?
}
class C extends B{
?
}
//class C extends B, class B extends A,也就是说,C直接继承B,其实C还间接继承A。
Java中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中之直接访问(可以通过间接访问,也就是父类中的setter或getter方法)。
Java中的类没有显示的继承任何类,则默认继承object类,object类是 java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有object类型中所有的特征。
继承也存在一些缺点,例如:creditAccount类继承Account类会导致它们之间的耦合度非常高,Account类发生改变之后会马上影响到creditAccount类。
package com.liu.jicheng;
?
public class ExtendsTest01 {
public static void main(String[] args) {
Account account=new Account("1000",1000);
CreditAccount creditAccount=new CreditAccount("2000",2000,0.99);
System.out.println("账号:"+account.getAcnno()+" 余额:"+account.getBalance());
System.out.println("账号:"+creditAccount.getAcnno()+" 余额:"+creditAccount.getBalance()+" 信誉度:"+creditAccount.getCredit());
}
?
}
?
//普通账户类
class Account{//父类,默认继承Object,Object是所有类的祖宗
//账号
private String acnno;
//余额
private double balance;
//无参构造
public Account(){
?
}
//有参构造
public Account(String acnno, double balance) {
this.acnno = acnno;
this.balance = balance;
}
//setter and getter 方法
public String getAcnno() {
return acnno;
}
?
public void setAcnno(String acnno) {
this.acnno = acnno;
}
?
public double getBalance() {
return balance;
}
?
public void setBalance(double balance) {
this.balance = balance;
}
}
?
class CreditAccount extends Account{//子类继承父类 ,父类中的所有属性、方法(构造方法除外)都传递到了子类中
//信誉度
private double credit;
//无参
public CreditAccount(){
?
}
//有参
public CreditAccount(String acnno, double balance, double credit) {
/*这样写不太好
this.setAcnno(acnno);
this.setBalance(balance);
*/
super(acnno, balance);
this.credit = credit;
}
?
//setter and getter 方法
public double getCredit() {
return credit;
}
?
public void setCredit(double credit) {
this.credit = credit;
}