zoukankan      html  css  js  c++  java
  • 【Java之继承 08】

    一、继承:

    1、语法:class  类型 extends 父类名{ }

    2、java中继承只能单继承

    3、B类继承A类:

      A类称作父类,基类,超类,superclass

      B类称作子类,派生类,subclass

    4、子类继承父类会将父类中所有的数据全部继承,包括私有的也会继承,构造方法除外

    5、私有的数据继承之后,虽然在子类中没有办法直接访问,可以间接访问。

    6、继承最基本的作用是:代码重用。最重要的作用是:方法覆盖和多态。

    package com.JavaStudy.study0427;
    
    public class Animal {
        private String name;
    
        Animal(){}
    
        public void setName(String name){
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void move( ){
    
            System.out.println(getName()+" is moving!");
        }
    
    }
    package com.JavaStudy.study0427;
    
    public class Fly extends Animal {
    
        Animal animal = new Animal();
    
        public void fly(){
    
            animal.setName("小燕子");
            System.out.println(animal.getName()+" is flying !");
        }
    }
    package com.JavaStudy.study0427;
    
    public class Test {
        public static void main(String[] args){
            Fly fly = new Fly();
    
            //fly对象调用自己类的方法
            fly.fly();
    
            //Fly继承了Animal类,所以可以用fly的对象给Animal类的name赋值,同样也可以调用Animal类的moving()
            //子类不能直接访问父类的私有数据,但是可以通过set这样的间接方式访问
            fly.setName("小兔子"); //
            fly.move();
        }
    }

    二、super关键字

    1、super不是引用类型,不保存内存地址,不指向任何对象

    2、父类中有这个数据,结果子类中也有这个数据,非要在子类中访问父类中的那个数据,必须使用”super.“,除该情况外,其他程序都不需要加“super.”

    3、super本质只是一个普通的关键字而已,是代表当前子类对象中的“父类型特征”

    4、“super.”语法不能用在静态方法中,“super.”可以使用在成员方法中。super仅代表父类型

    package com.JavaStudy.study0427;
    
    public class SuperDemo01 {
    
        public static void main(String[] args){
            Manager m = new Manager();
            m.test();
            System.out.println(m);
        }
    }
    
    
    class Employee{
        String name = "TOM";
    
        public void work(){
            System.out.println("Employee类中的work方法!");
        }
    
    
    }
    
    class Manager extends Employee{
        String name ="jeck";
    
        public void test(){
            work();//自己类中的work方法
            this.work();//this是一个引用指向自己,所以是子类的work
            super.work();//super不是一个引用,用的是父类的work方法
    
            System.out.println(name);
            System.out.println(this.name);//this是一个引用指向自己,所以是子类的name属性
            System.out.println(super.name);//super不是引用,用的是父类中的属性
    
            System.out.println(this);//打印this所保存的内存地址,来验证this是自己指向自己
    
        }
    
        public void work(){
            System.out.println("Manager子类中的work方法!");
        }
    }
    
    ====执行结果====
    Manager子类中的work方法!
    Manager子类中的work方法!
    Employee类中的work方法!
    jeck
    jeck
    TOM
    com.JavaStudy.study0427.Manager@2503dbd3
    com.JavaStudy.study0427.Manager@2503dbd3

    三、super()

    this适用于本类,super适用于多个类

    this(实参):

    通过一个构造方法去调用另外一个构造方法

    目的是代码重用

    只能出现在构造方法的第一行

    super(实参):

    通过子类的构造方法调用父类的构造方法

    目的:通过子类的构造方法调用父类的构造方法,目的是给当前子类对象中的父类型特征赋值

    只能出现在构造方法的第一行

    this(实参);和super(实参);不能共存

    注意:虽然super(实参);执行了,但是并不会创建父类对象

    子类中的构造方法要执行,那么必须先执行父类中的构造方法。(先有父后有子)

    如果一个构造方法第一行没有显示写“super(实参);”或者“this(实参)”,系统会默认加一个super()

    Java中只要创建一个Java对象,则Java.lang.Object;中的无参数构造方法一定会执行。

    package com.JavaStudy.study0427;
    
     // 子类给父类赋值,用到super()
    
    
    //Account默认情况下继承了Object类,一般不写
    class Account extends Object{
        private String actno;
        private String balance;
    
        public void setActno(String actno){
            this.actno = actno;
        }
    
        public String getActno() {
            return actno;
        }
    
        public void setBalance(String balance){
            this.balance = balance;
        }
        public String getBalance(){
            return balance;
        }
    
        Account(){
            super();//调用了父类Object
            actno = "工行";
            balance = "货币";
        }
    
        Account(String actno,String balance){
            this.actno = actno;
            this.balance = balance;
        }
    }
    
    class DebitAccount extends Account{
        private String debit;
    
        public void setDebit(String debit){
            this.debit = debit;
        }
    
        public String getDebit() {
            return debit;
        }
    
        DebitAccount(){
            super();//调用了父类的缺省构造器
            debit = "信用";
        }
    
        DebitAccount(String actno,String balance,String debit){
            super(actno,balance);//调用了父类有两个参数的构造方法,目的是给父类赋值
            this.debit = debit;
        }
    
    }
    
    public class SuperDemo02 {
        public static void main(String[] args){
            DebitAccount d1 = new DebitAccount();
            System.out.println(d1.getActno());
            System.out.println(d1.getBalance());
            System.out.println(d1.getDebit());
    
            System.out.println("--------------------");
            DebitAccount d2 = new DebitAccount("招行","基金","征信");
            System.out.println(d2.getActno());
            System.out.println(d2.getBalance());
            System.out.println(d2.getDebit());
        }
    }
    
    ===执行结果===
    工行
    货币
    信用
    --------------------
    招行
    基金
    征信
  • 相关阅读:
    有关云计算的思考
    转载:args build and execute command lines from standard input
    云计算时代来临
    How to check the service availble
    反射小结
    JOptionPane用法java
    eclipse快捷键调试总结
    javascript 控制 html元素 显示/隐藏
    "ORA00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法
    麻辣豆腐与编码
  • 原文地址:https://www.cnblogs.com/frankruby/p/12106246.html
Copyright © 2011-2022 走看看