Java基础复习-10面向对象进阶


提示:以下是本篇文章正文内容,可供参考

static关键字

static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量

  • 特点:
    被该类所有对象共享
  • 调用方式:
    类名调用(推荐)
    对象名调用
    静态变量是随着类的加载而加载的,优先于对象出现的

工具类

作用:帮助我们做一些事情的,但是不描述任何事物的类

注意事项:

1.类名见名知意
2.私有化构造方法
3.方法定义为静态

代码演示:
工具类:

// 计算数组平均数的一个工具类
public class ArrayUtil {
//    1.私有化构造方法
//    目的:为了不让外界创建他的对象
    private ArrayUtil(){
    }
    // 方法定义为静态
    public static double getAverage(double[] arr){
        double sum = 0;
        // 计算数组的总和
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i];
        }
        // 计算平均数
        return sum/arr.length;
    }
}

测试类:

public class test {

    public static void main(String[] args) {
        // 测试工具类
        double[] arr = {1,2,3,4,5};
        double average = ArrayUtil.getAverage(arr);
        System.out.println(average);
    }
}

运行结果:
在这里插入图片描述

static的注意事项

  • 静态方法只能访问静态变量和静态方法

  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法

  • 静态方法中是没有this关键字

总结:静态方法中,只能访问静态。
非静态方法可以访问所有。静态方法中没有this关键字

在这里插入图片描述

继承

概念

Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

继承的格式:

public class Student extends Person { }

Student称为子类(派生类),Person称为父类(基类或超类)。

使用继承的好处

可以把多个子类中重复的代码抽取到父类中了,提高代码的复用性。

子类可以在父类的基础上,增加其他的功能,使子类更强大。

什么时候用继承?

当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

继承后子类的特点?

子类可以得到父类的属性和行为,子类可以使用。子类可以在父类的基础上新增其他功能,子类更强大。

继承的特点

  • Java只支持单继承,不支持多继承,但支持多层继承。

  • 单继承:一个子类只能继承一个父类

  • 不支持多继承:子类不能同时继承多个父类

  • 子类只能访问父类中非私有的成员

多层继承:子类A继承父类B,父类B可以继承父类C

每一个类都直接或者间接的继承于Object

子类到底能继承父类中的哪些内容?

在这里插入图片描述

继承中:成员变量的访问特点

就近原则:谁离我近,我就用谁
先在局部位置找,本类成员位置找,父类成员位置找,逐级往上。

如果出现了重名的成员变量怎么办?

System.out.println(name);    从局部位置开始往上找

System.out.println(this.name ) ;从本类成员位置开始往上找

System.out.println(super.name);从父类成员位置开始往上找

继承中:成员方法的访问特点

  • 直接调用满足就近原则:谁离我近,我就用谁
  • super调用,直接访问父类
    代码演示:
public class test {

    public static void main(String[] args) {
       Teacher s = new Teacher();
       s.lunch();
    }
}

class Person{
    public void eat(){
        System.out.println("我爱吃米饭");
    }
    public void drink(){
        System.out.println("喝水");
    }
}

class Student extends Person{
    public void lunch(){
        //先在本类中查看eat和drink方法,就会调用子类的,如果没有,就会调用从父类中继承下来的eat和drink方法
        this.eat();
        this.drink();
    }
}
class Teacher extends Person{
    public void lunch(){
          this.eat();
          this.drink();

          super.drink();
          super.eat();
    }
    public void eat(){
        System.out.println("我爱吃汉堡包");
    }
    public void drink(){
        System.out.println("喝茶");
    }
}

运行结果:
在这里插入图片描述

方法的重写

当父类的方法不能满足子类现在的需求时,需要进行方法重写

书写格式

在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

@Override:重写注解

1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。

2.加上注解后如果有红色波浪线,表示语法错误。

3.建议重写方法都加@Override注解,代码安全,优雅!

应用场景:

当父类中方法,不能满足子类现在的需求时,我们就需要把这个方法进行重写。

注意:子类中重写的方法上面需要加上@Override注解

正如上面的Teacher类当中的eat和drink方法就是重写了父类Person当中的方法

方法重写注意事项和要求

1.重写方法的名称、形参列表必须与父类中的一致。

2.子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解︰空着不写< protected < public)

3.子类重写父类方法时,返回值类型子类必须小于等于父类

4。建议:重写的方法尽量和父类保持一致。

5.私有方法不能被重写。

6.子类不能重写父类的静态方法,如果重写会报错的。

本质:只有被添加到虚方法表中的方法才能被重写

继承中:构造方法的访问特点

  • 父类中的构造方法不会被子类继承。

  • 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。

为什么?

答:子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。

  • 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。

怎么调用父类构造方法的?

子类构造方法的第一行语句默认都是: super(),不写也存在,且必须在第一行。

如果想调用父类有参构造,必须手动写super进行调用。

this、super使用总结

this:理解为一个变量,表示当前方法调用者的地址值;

super:代表父类存储空间。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值