Java的面向对象——static和继承

写在前面:Java面向对象基础篇,移步Java的面向对象——基础篇_褚睿睿的博客-优快云博客

1.学习目标:学习Java面向对象的static和继承

2.学习内容:

2.1 static

可修饰成员变量和成员方法,一般用于工具类中,表静态,共享

调用方法:变量名或类名都可以调用

tips:1.静态方法中只能访问静态

         2.非静态方法可以访问所有

         3.静态方法不支持this

2.2 继承

当类与类中间有相同的属性,并且都属于同一个父类,那么就可以采用继承,优化代码。

使用方法:public class 子类 extends 父类{}

子类继承父类
成员变量public 能private 能
成员方法public 能private 不能
构造方法public 不能

privat 不能

Java继承只支持单个继承,不支持多个继承(可以理解为一个儿子只能有一个爸爸),但支持多层继承(可以理解为儿子可以继承爸爸,爸爸可以继承爷爷,那么爷爷是儿子的间接父类)

Java中的每一个类都直接继承或间接继承object类(Java提前写好的类)

2.3 继承中的访问特点

2.3.1 成员变量

就近原则

当出现重名时:

若想调用子类的成员变量,用this

若想调用父类中的成员变量,用super

2.3.2 成员方法

同成员变量,遵守就近原则

当出现重名时:

若想调用子类的成员变量,用this

若想调用父类中的成员变量,用super

2..3.3 构造方法

子类构造方法的第一行有一个默认的suoer(),访问父类无参构造,进行初始化。

默认先访问父类无参构造,再执行自己的无参构造

子类不可以继承父类的构造方法,但可以用super调用

2.4 方法的重写

子类重写方法的上面要加@override,帮助我们检查

当父类的成员方法无法满足子类的需求时,需要进行方法的重写

2.5 this与super总结

关键字访问成员变量访问成员方法访问构造方法
this

this.成员变量

访问本类的成员变量

this.成员方法

访问本类的成员方法

this()

访问本类的构造方法

super

super.成员变量

访问父类的成员变量

super.成员方法

访问父类的成方法

super()

访问父类的构造方法

3.知识运用

3.1 写一个数组工具类,类中有两个成员方法,一个将字符串数组放进[]中打印,一个求整数数组的平均值,并在测试类中实现。

代码如下

工具类

import java.util.StringJoiner;

public class Arrtools {
    //为了不让外界创建它的对象
    private Arrtools(){}
    public static String ArrPrint(String arr[]){
        StringJoiner sj = new StringJoiner(",","[","]");
        for (int i = 0; i < arr.length; i++) {
            sj.add(arr[i]);
        }
        String str = sj.toString();
        return str;
    }
    public static int Getave(int arr[]){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i];
        }
        int ave = sum/arr.length;
        return ave;
    }
}

测试类

public class test {
    public static void main(String[] args) {
        String arr1[] = {"a","b","d"};
        String result1 = Arrtools.ArrPrint(arr1);
        System.out.println(result1);
        int arr2[] = {1,6,9,7,5,8};
        int result2 = Arrtools.Getave(arr2);
        System.out.println(result2);
    }
}

3.2 写一个带继承结构的标准的javabe类

经理 成员变量:工号,姓名,工资,工作(管理)

        成员方法:吃饭

厨师 成员变量:工号,姓名,工资,工作(炒菜)

        成员方法:吃饭

代码如下

父类person

public abstract class person {
    //成员变量
    private String id;
    private String name;
    private int income;
    private String work;
    //空参构造方法
    public person() {}
    //带参构造方法
    public person(String id, String name, int income) {
        this.id = id;
        this.name = name;
        this.income = income;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getIncome() {
        return income;
    }

    public void setIncome(int income) {
        this.income = income;
    }

    public String getWork() {
        return work;
    }

    public void setWork(String work) {
        this.work = work;
    }

    @Override
    public String toString() {
        return "person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", income=" + income +
                ", work='" + work + '\'' +
                '}';
    }

    //成员方法
    public void eat(){
        System.out.println("吃米饭");
    }
    public void reponsible(){
        System.out.println("发奖金");
    }

    public abstract void responsible();
}

子类cook

public class cook extends person{
    //空参构造方法
    public cook() {
        super();
    }

    public cook(String id, String name, int income) {
        super(id, name, income);
    }

    @Override
    public void responsible(){
        System.out.println("领奖金");
    }

}

子类manager

public class manager extends person{
    //空参构造方法
    public manager() {
        super();
    }
    //有参构造方法
    public manager(String id, String name, int income) {
        super(id, name, income);
    }

    @Override
    public void responsible() {

    }


    //成员方法
    public void work(){
        System.out.println("管理");
    }
}

测试类

import java.util.ArrayList;

public class test {
    public static void main(String[] args) {
        ArrayList<person> list = new ArrayList<>();
        cook c = new cook();
        manager m = new manager();
        c.setId("214010311");
        c.setName("ccr");
        c.setIncome(8000);
        c.setWork("炒菜");
        m.setId("214010312");
        m.setName("zcf");
        m.setIncome(9000);
        m.setWork("管理");
        list.add(c);
        list.add(m);
        for (int i = 0; i < 2; i++) {
            System.out.println(list.get(i));
        }
        m.eat();
        c.eat();
        m.reponsible();
        c.responsible();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值