JAVA三大特性之继承(包括super、this、抽象类等), 内含发红包小程序。

继承

概述

继承就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非非私有的属性和行为。其由来就是当多各类中存在相同的属性和行为的时候,将这些内容抽取到单独的一个类当中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。好处有:1. 提高了代码的复用性。2.类与类之间产生了关系,是多态的前提。

继承后的成员变量和成员方法

  • 成员变量
    不重名的时候,子类和父类的使用变量不会有影响,但是重名的时候,当子类需要访问父类中非私有成员变量时,需要使用super关键字,修饰父类成员变量,才能使用父类的变量。
  • 成员方法
    当子类和父类出现一模一样方法(返回值类型,方法名和参数列表都相同)的情况时,子类的方法会覆盖父类的方法。声明不变,重新实现。叫做方法重写(Override)
    在重写时,调用父类的方法,使用super.父类成员方法,表示调用父类的成员方法。
    子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
    子类方法覆盖父类方法·,返回值类型、函数名和参数列表都要一模一样。

继承后的构造方法

构造方法:

  1. 构造方法的名字与类名一致的。所以子类是无法继承父类构造方法的。
  2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认有一个super(),表示调用父类的构造方法,父类成员变量初始化后,才能给子类使用。
    使用super();语句即可调用父类构造方法。

super和this

每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。图解如下所示:
在这里插入图片描述

  • super:代表父类的存储空间标识(可以理解为父亲的引用)。
  • this:代表当前对象的引用(谁调用就代表谁)。
    构造方法
    this():父类的构造方法。
    super():子类的构造方法。

继承特点:

  1. Java只支持单继承,不支持多继承。
  2. Java支持多层继承(继承体系)。顶层父类是Object类。所有的类默认继承Object,作为父类。
  3. 子类和父类是一种相对的概念。

抽象类

父类中的方法,被他的子类继承并重写,子类各自实现的功能都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方向的类就是抽象类。
如果一个类包含抽象方法,那么该类必须是抽象类,而且,子类必须重写父类的所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
代码:

public abstract class Animal {
     public abstract void run();  
}
public class Cat {
       public void run(){
                sout("Cat likes fishes.");
       }
}

发红包程序

public class User {
    // User Variable
    private double leftMoney;
    private String userName;

    // Constructor Method
    public User(){}
    public User(double leftMoney, String userName){
        this.leftMoney = leftMoney;
        this.userName = userName;
    }
     // get/set Method
    public double getleftMoney(){
        return leftMoney;
    }

    public void setLeftMoney(double leftMoney) {
        this.leftMoney = leftMoney;
    }

    public String getuserName(){
        return userName;
    }
    public void setuserName(String userName){
        this.userName = userName;
    }
    public void show(){
        System.out.println("Username: "+ userName + '\n' + " Balance: "+ leftMoney);
    }
}

import java.util.ArrayList;

public class Leader extends User {
        public Leader(){
        }
        public Leader(double leftMoney, String userName){
            super(leftMoney, userName);
        }
        public ArrayList<Double> send(double money, int count){
            double leftMoney = getleftMoney();
            if (money > leftMoney)
                return null;
            setLeftMoney(leftMoney - money);
            ArrayList<Double> list = new ArrayList<>();
            money = money * 100;
            double m = money / count;
            for (int i = 0; i < count; i++) {
                list.add(m / 100);
            }
            return list;
        }
import java.util.ArrayList;
import java.util.Random;

public class Member extends User {
    public Member(){}

    public Member(double leftMoney, String userName) {
        super(leftMoney, userName);
    }
    public void grab(ArrayList<Double> list){
        Random rm = new Random();
        int index = rm.nextInt(list.size());
        double money = list.remove(index);
        setLeftMoney(money);
    }
}
import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // show leader information
        Leader leader = new Leader(1000,"GFY");
        // Start giving away red pockets!
        Scanner sc = new Scanner(System.in);
        System.out.print("Please input the money of red pockets: ");
        double money = sc.nextInt();
        System.out.println();
        System.out.print("Please input the amount of red pockets: ");
        int count = sc.nextInt();
        System.out.println();

        ArrayList<Double> list = leader.send(money,count);
        if (list == null){
            System.out.println("Sorry, balance is not sufficient.");
            return;
        }
        // Members grab red pockets!
        Member m1 = new Member(leader.getleftMoney(), "GFY");
        Member m2 = new Member(0,"ZS");
        Member m3 = new Member(0,"DR");
        m1.grab(list);
        m2.grab(list);
        m3.grab(list);
        // show results!
        leader.show();
        m1.show();
        m2.show();
        m3.show();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值