javaSE学习笔记day08

一:final关键字

final最终,可以修饰类,属性,方法

final 修饰类,类不能被继承

final 修饰属性,属性就变成了常量

final 修饰方法,方法就不能被重写

常量:不能被重新赋值,命名全大写。

二:static

static 静态修饰符

1.静态修饰属性和方法

2.一旦修饰属性和方法就变成了类属性,类方法

3.被static修饰的属性和方法随着类加载而初始化

4.且被static修饰的属性和方法在内存中只有一份,被所有该类对象共享

5.静态的属性和方法不会随着创建对象进堆中,就存在于静态域。

以前每次创建对象,每次都有属于自己的属性,这些属性叫对象属性,现在static修饰了属性和方法后,这属性和方法不再属于某个对象,还是属于类,称为类属性类方法。

三:语法应用

静态修饰的属性和方法建议直接通过类名调用。

因为,静态的属性和方法随着类的加载就已经出现在内存中,并初始化成功,意味着就可以使用了,就没必要再通过创建对象取调用,这样反而耽误时间空间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uceFcVS-1676507095883)(D:\前锋学习笔记\笔记\image-20230215111410099.png)]

练习的时候:将一些测试方法都定义成static方便调用

static方法只能调用静态方法和静态属性

因为:静态修饰的属性和方法随着类的加载就已经出现在内存中,并初始化成功,而对象属性对象方法(非静态属性和非静态方法)是需要创建像才会出现

总结:静态只能调用静态

非静态方法能调用静态方法和属性。

静态方法内不能调用this

总结

到底什么时候用static?

  1. main方法方便调用其他方法时,将其他方法定义成静态

  2. 当有些数据必须共享时,就需要使用static。

四 多态

程序中的多态:某个方法的多种形态,同一个方法,执行时会出现不同的效果

多态形成的前提条件:

1.有继承关系(或者实现接口)。

2.子类重写父类方法。

3.父类引用指向子类对象,也叫向上转型。

编译看父类,运行看子类。

父类引用父类,运行看子类

public class Animal {
    String name;
    public void eat(){
        System.out.println("动物吃");
    }
}
class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
class test{
    public static void main(String[] args) {
        Animal animal = new Dog(); // 子类向上转型,父类引用子类
		animal.eat();
        animal = new Cat();
        animal.eat();
    }
}

五 :向上转型&向下转型

向上转型:父类引用子类的对象,子类对象向上转型成了父类

向下转型:父类引用向下转型成子类默认不允许需要强制转换来完成

Dog dog = (Dog) animal;

什么时候需要向下转型? 当需要调用子类特有的方法时,就需要将父类引用向下转型成子类对象,才可以有子类特有的方法。

总结:

大部分多态的使用场景就是将方法的参数列表设计成父类类型,调用方法时传入子类类型,运行得到子类的效果。

package com.poly;

public class Bulb {

    // 发光的方法
    public  void shine(){
        System.out.println("会发光!!!");
    }
}
// 红色
class red_bulb extends Bulb{
    @Override
    public void shine() {
        System.out.println("开红灯");
        System.out.println("红灯亮");
        System.out.println("发红光");
    }
}

// 绿灯
class green_bulb extends Bulb{
    @Override
    public void shine() {
        System.out.println("开绿灯");
        System.out.println("绿灯亮");
        System.out.println("发绿光");
    }
}

class TableLamp{
    public static void main(String[] args) {
        fg(new green_bulb());
        fg(new red_bulb());

    }
    public static void fg(Bulb bulb){
        if (bulb instanceof  green_bulb){
            new green_bulb().shine();
        }else if (bulb instanceof red_bulb){
            new red_bulb().shine();
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二手Java程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值