什么是继承 --- Extends
继承:在现实世界中也是真实存在的。例如:父亲很有钱,儿子不努力也很有钱。
基本语法
class 子类 extends 父类
继承的作用:
基本作用:子类继承父类,代码可以得到复用。
主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。
继承的相关特性
B类继承A类,则A类称为“超类(superclass)、父类、基类”,B类则称为“子类(subclass)、派生类、扩展类”。
java中的继承只支持单继承。C++才支持多继承。比如,java中不允许这样写代码---class B extends A,C()
虽然不支持多继承,但是有时候会产生间接继承的效果。例如,class C extends B,class B extends A。也就是说,C继承B,B继承A;其实,C还间接继承A。
java规定,子类继承父类,除了构造方法不能继承之外,其余的都可以继承。但是私有的属性无法在子类中直接访问。(父类中private修饰的不能在子类中直接访问,可以通过间接手段访问)。
java中的类没有显示的继承任何类,则默认继承Object类,Object类是java提供的根类。也就是说,一个对象生来就具有Object类型中的所有特征。
继承缺点:代码耦合度高,父类改变后会马上影响子类。
Object类是所有类的超类。类体系结构中的根。
点击查看代码
package jicheng;
public class ExtendsTest02 {
public static void main(String[] args) {
Account act = new Account();
act.setActno("11111");
act.setBalance(10000);
System.out.println(act.getActno() + act.getBalance());
CreditAccount ca = new CreditAccount();
ca.setActno("22222");
ca.setBalance(-1000);
ca.setCredit(0.99);
System.out.println(ca.getActno() + ca.getBalance() + ca.getCredit());
}
}
class Account01{ //父类
private String actno;
private double balance;
public Account01(){}
public Account01(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;
}
}
class CreditAccount01 extends Account01{ //子类,可以继承和父类相同的属性
private double credit;
public CreditAccount01(){}
public CreditAccount01(String actno, double balance, double credit) {
this.credit = credit;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
Q:子类继承父类方法后,能使用子类对象调用父类方法吗?
A:可以。子类继承父类后,这个方法就属于子类了。
Q:假设以后开发中,有一个A类,一个B类,A类和B类确实有重复的代码,那么他们两个之间就可以来继承吗?
A:不一定,还是要看一看它们之间是否能够使用“is a”
点击查看代码
class Customer{
String name; //名字
//setter and getter
}
class Product{
String name; //名字
}
class Product extends Customer{
}