继承
package com.company.extend;
/*
* 关于java语言当中的继承:
* 1、继承是面向对象三大特征之一,三大特征分别是:封装、继承、多态。
*
* 2、继承“基本”的作用是:代码复用。但是继承最重要的作用是:有了继承才有了以后"方法的覆盖"和"多态机制"。
*
* 3、继承语法格式:
* 【修饰符列表】 class 类名 extends 父类名{
* 类体 = 属性 + 方法
* }
*
* 4、java语言当中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类。在C++中支持多继承。
*
* 5、关于继承中的一些术语:
* B类继承A类,其中:
* A类称为:父类、基类、超类、superclass
* B类称为:子类、派生类、subclass
*
* 6、在java语言当中子类继承父类都继承哪些数据呢?
* - 私有的不支持继承
* - 构造方法不支持继承
* - 其他数据都可以被继承
*
* 7、虽然java语言当中只支持单继承,但是一个类也可以间接继承其他类,例如:
* C extends B{
* }
* B extends A{
* }
* A extends T{
* }
* C直接继承B类,间接继承A、T类
*
* 8、java语言中假设一个类没有显示的继承任何类,该类默认继承 JavaSE 库中提供的java.lang.Object类。
* java语言中任何一个类都有Object类的特征。
* */
public class ExtendsTest {
public static void main(String[] args) {
CreditAccount act = new CreditAccount();
act.setActno("act-001");
act.setBalance(5000);
act.setCredit(0.98);
System.out.println(act.getActno() + "," + act.getBalance() + "," + act.getCredit());
}
}
package com.company.extend;
public class Account {
private String actno;
private double balance;
public Account(){
}
public Account(String actno, double balance){
this.actno = actno;
this.balance = balance;
}
public void setActno(String actno){
this.actno = actno;
}
public void setBalance(double balance){
this.balance = balance;
}
public String getActno(){
return this.actno;
}
public double getBalance(){
return this.balance;
}
}
package com.company.extend;
public class CreditAccount extends Account{
private double credit;
public CreditAccount() {
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
方法覆盖
package com.company.override;
/*
* 回顾java语言中方法的重载:
* 1、方法的重载又称为Overload
* 2、方法重载什么时候使用?
* 当在同一个类当中,方法完成的功能是相似的,建议方法名相同,这样方便程序员的编程,
* 就像在调用一个方法似的。代码美观。
* 3、什么条件满足之后构成方法重载?
* * 在同一个类中
* * 方法名相同
* * 参数列表不同:类型、顺序、个数
* 4、方法重载和什么无关?
* * 和方法的返回值无关
* * 和方法的修饰符列表无关
*
* 关于java方法语言当中方法的覆盖:
* 1、方法覆盖有被称为方法重写,Override【官方】/ Overwrite
*
* 2、什么时候使用方法重写?
* 当父类中的方法已经无法满足当前子类的业务需求,
* 子类有必要将父类中继承过来的方法进行重新编写,
* 这个重新编写的过程称为方法重写/方法覆盖。
*
* 3、什么条件满足之后方法会发生重写呢?【代码满足什么条件之后,就构成方法的覆盖呢?】
* * 方法覆盖发生在具有继承关系的父子关系之间
* * 返回值类型相同,方法名相同,形参列表相同
* * 访问权限不能更低,只能相等或更高(public访问权限最高 > protected > private)
* * 跑出异常不能更多,只能更少。
*
* 4、建议方法重写的时候尽量赋值粘贴,避免编写出错。
*
* 5、注意:
* 私有方法不能继承,所以不能覆盖
* 构造方法不能继承,所以不能覆盖
* 静态方法不存在覆盖
* 覆盖只针对方法,不谈属性。
* */
public class OverrideTest01 {
public static void main(String[] args) {
// 创建动物对象
Animal a1 = new Animal();
a1.move();
// 创建猫类
Cat c1 = new Cat();
c1.move();
// 创建鸟类
Bird b1 = new Bird();
b1.move();
}
}
package com.company.override;
// 动物类
public class Animal {
public void move(){
System.out.println("动物在移动!");
}
}
package com.company.override;
public class Bird extends Animal{
public void move(){
System.out.println("鸟在飞!");
}
}
package com.company.override;
// 猫类
public class Cat extends Animal{
public void move(){
System.out.println("猫在跑!");
}
}