java13 继承

继承

关于java语言当中的继承:
继承:面向对象3大特征之一(封装 继承 多态)
继承的基本作用: 代码复用。有了继承以后才有了 后面的 方法的覆盖 和 多态机制。

继承的语法:
  【修饰符列表】 class 类名 extend 父类名{
    类体 = 属性 + 方法
    }

java中的继承,一个类中只支持单继承,不支持多继承。 C++支持多继承、

相关术语:
B类继承A类:
  A类:父类。基类。超类。superclass
  B类:子类。派生类。subclass

子类继承父类哪些部分:
  私有不支持继承
  构造方法不支持继承
  其它都可以继承
  
虽然java语言当中支持单继承,但是一个累可以间接继承其它类,例如:
C extends B {
}
B extends A{
}
A extends T{
}
C类继承B类,但是间接继承了A和T类。

java语言当中假设 一个类没有显示继承任何类,该类默认继承 javaSE当中提供的 java.lang.Object类。

第一个简单继承的例子

public class Account {
    private String actno;
    private double balance;

    public Account(){
    }

    public Account(String actno, double balance){
        super();
        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;
    }
}

public class CreditAccunt extends Account{

    private double credit;

    public CreditAccunt(){
        super();
    }

    public double getCredit() {
        return credit;
    }

    public void setCredit(double credit) {
        this.credit = credit;
    }
}


/*
关于java语言当中的继承:
    继承:面向对象3大特征之一(封装 继承 多态)
    继承的基本作用: 代码复用。有了继承以后才有了 后面的 方法的覆盖 和 多态机制。

    继承的语法:
      【修饰符列表】 class 类名 extend 父类名{
        类体 = 属性 + 方法
        }

    java中的继承,一个类中只支持单继承,不支持多继承。 C++支持多继承、

    相关术语:
    B类继承A类:
      A类:父类。基类。超类。superclass
      B类:子类。派生类。subclass

    子类继承父类哪些部分:
      私有不支持继承
      构造方法不支持继承
      其它都可以继承

    虽然java语言当中支持单继承,但是一个累可以间接继承其它类,例如:
    C extends B {
    }
    B extends A{
    }
    A extends T{
    }
    C类继承B类,但是间接继承了A和T类。

    java语言当中假设 一个类没有显示继承任何类,该类默认继承 javaSE当中提供的 java.lang.Object类。

  双shift 表示 查找类
 */
public class Test {
  public static void main(String[] args) {
    Test t = new Test();
    String s = t.toString(); // 说明可以调用toString方法
    System.out.println(s);


    CreditAccunt act = new CreditAccunt();
    act.setActno("act-001");
    act.setCredit(-1000.0);
    act.setCredit(0.99);

    System.out.println(act.getActno() + "," + act.getBalance() + "," + act.getCredit());
  }
}

例子2

public class Test {
  public static void main(String[] args) {
  C c = new C();
  c.doSome();
  }
}

class A{
  public void doSome(){
    System.out.println("do Some!"); // 这里继承的方法是从B中继承过来的
  }
}

class B extends A{}

class C extends B{}


方法的覆盖

回顾java语言当中方法的重载:
英文:overload

什么情况 使用 方法重载:
当在同一个类当中,方法完成的功能是相似的,建议方法名相同
就像是在调用一个方法
什么条件 满足 可以 方法重载:
在同一个类
方法名相同
参数列表不同: 类型,顺序,个数

方法覆盖 又称为 方法重写 overwrite/override「官方」

什么情况 使用 父类重写:
当父类中的方法 已经无法满足 当前子类的业务需求
子类中 有必要 将 父类中 继承过来的方法 进行重写

方法重写的时候:
返回值类型相同,方法名相同,形参列表相同
访问权限不能更低,只可以更高。
抛出异常只能更多,不能更少。

注意:
私有方法不能继承, 所以不能覆盖。
构造方法不能继承, 所以不能覆盖。
静态方法不存在覆盖(覆盖只针对 方法 不含 属性)

例子 动物 猫 鸟 鹦鹉


public class Animal {

  // 移动
  public void move(){
    System.out.println("动物在移动");
  }
}
// 鸟类
public class Bird extends Animal {
    public void move(){
        System.out.println("鸟在飞翔");
    }
}

// Cat
public class Cat extends Animal {
    public void move(){
        System.out.println("猫在在移动");
    }
}
public class YingWu extends Bird{
    @Override
    public void move() {
        System.out.println("鹦鹉飞不起来");
    }
}

知识回顾

this 关键字: java当中关键字
静态方法中,不可以使用this,因为静态方法中 直接采用 类.方法名 的方式 去调用。
实例方法中,调用实例方法,是通过 new 一个对象,在实例对象中 去调用 这个方法。 this实际上是一个引用。用于调用 存储在堆内存中的对象。

java13 继承_第1张图片

this就两种用法:
一种 this.
另一种 this() 在构造函数第一行调用别的构造函数。

所以静态的,都采用 类. 方式访问,是类级别的。

实例变量在 构造方法的执行过程中访问。
静态变量:在类加载的时候,创造。存在方法区。

extend 继承
java中的类只支持单继承,不支持多继承。
继承的基本作用:代码复用;有了继承才有了方法覆盖 和 多态。

方法重载:在同一个类当中,方法名相同,参数列表不同,实现的功能相似。

在同一个类型当中,如果 这几个方法类型相似,将 方法名设为一样的,但是 参数列表不同。

方法重载 和 返回值类型无关 和 修饰符类型无关。

方法重写:重写父类当中的代码。
父类中的方法无法满足子类的需求。

你可能感兴趣的:(java入门,java,java-ee,android)