note_doit_day09

本文详细介绍了Java中的final关键字,包括final修饰类、方法和变量的规则及其应用场景。此外,讲解了接口的使用、成员特点、多态的概念以及静态修饰符static的相关知识点。通过实例展示了多态的访问特性和转型操作,强调了多态的优缺点。最后,探讨了静态内容的访问注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.final修饰符:
    1.final最终修饰符  final可以修饰 类 方法和变量(成员变量 局部变量)
        final修饰类  不能被继承
        final修饰方法 不能被重写
        final修饰变量 只能赋值一次 不可以二次赋值 是常量
    2.final修饰符 修饰引用数据类型变量 地址值不能改变 但是属性值可以改变
    3.final修饰成员变量 不能使用默认值 必须在创建对象之前赋值
        1.以显示赋值
        2.以在构造方法中赋值 但是每个构造方法都赋值
    
    EXP1:
        public class Demo01_Final {

        public static void main(String[] args) {
            //  final修饰符 修饰引用数据类型变量 地址值不能改变 但是属性值可以改变
           final Person p = new Person();
            p = new Person();
            p.name = "柳岩";
            p.name = "唐嫣";
            //对于p2这个对象来说 age的值永远都是3
            Person p2 = new Person();
            System.out.println(p2.age);

            Person p3 = new Person("aaa");
            //p3.age = 100;
            System.out.println(p3.age);
        }
    }
    EXP2:
    //final修饰的类不能被继承
    public /*final*/ class Fu {
        //final修饰的方法不能被重写
        public /*final*/ void  method(){

        //final修饰变量 只能赋值一次 是常量
       final int a = 10;
      final  int b ;
      b = 20;
        }
    }

2.接口:
    接口的使用
        类实现接口
        1.接口不能创建对象
        2.需要定义实现类实现接口
        3.重写所有抽象方法
        4.创建实现类对象 调用方法
    接口的成员特点
        1.接口没有构造方法
        2.接口中的成员变量 不再是变量 都是常量
        3.被默认修饰符修饰  public static final
        4.常量的命名规则  每个字母都大写 多个单词用_连接
        5.接口中的成员方法 默认修饰符 public abstract修饰
    接口的特点
        1 类实现接口 可以单实现 也可以多实现
          类可以在继承一个类的同时 实现多个接口
        2.接口与接口之间是继承关系 可以单继承 也可以多继承
        
    接口的默认方法
        public default 返回值类型 方法名(){
        }
     实现类可以直接使用这个方法 也可以对默认方法进行重写

    接口的静态方法
     public static 返回值类型 方法名(){
     }
     实现类不能使用,由接口名直接调用  接口名.方法名(实际参数);
     
    Test:
        public class Test {
    }
    interface  A{
        public abstract void show1();
        public abstract  void show();

        public abstract void show4();
    }
    interface B{
        public abstract void show2();
        public abstract  void show();
    }
    abstract  class Fu{
        public abstract void show3();

        //由于父类中已经定义类show4方法  子类虽然没有重写接口A的show4的方法
        //但是继承了Fu类的show4相当于 重写 不报错 子类也可以自己再重写show4方法
        public void show4(){

        }
    }
    class C extends Fu implements A,B{

        //重写接口A的show1方法
        @Override
        public void show1() {

        }

        //重写接口B的show2()方法
        @Override
        public void show2() {

        }
        //重写接口 A和B 相同的show方法
        //如果接口中有相同的方法 重写一次即可
        @Override
        public void show() {
        }
        //重写父类方法
        @Override
        public void show3() {

        }
    }
    
3.多态:
    public class Test {
        public static void main(String[] args) {
            //具体类多态  具体父类 变量名 = new 子类对象();
            Person p = new Student();
            p.eat();

            System.out.println("----------------");

            //抽象类多态 抽象父类 变量名 = new 子类对象();
            Animal a = new Cat();
            a.sleep();

            System.out.println("----------------------");

            //接口多态  接口 变量名 = new 实现类对象();
            Fly f = new Bird();
            f.fly();

        }
    }
    
    1.多态后访问成员的特点
        1.成员变量
             编译时 需要先到父类中去找 有没有这个变量 如果有编译通过
             如果没有 编译报错
             运行时 打印的是父类成员变量的值

            编译时  看左边
            运行时  看左边
        2.成员方法
            编译时 需要先到父类中去找 有没有这个方法 如果有编译通过
            如果没有 编译报错
            运行时  运行的是子类重写后的方法

            编译时 看左边
            运行时 看右边
    多态后 一切表现都是父类的表现 只有方法运行的是重写后的方法
    EXP:
        public class Test {
        public static void main(String[] args) {
            //多态创建对象
            Fu fz = new Zi();
            System.out.println(fz.name);
            //父类中没有这个变量 不能访问
    //        System.out.println(fz.age);

            fz.method();
            //多态后只能调用父类的功能 不能调用子类特有的功能 运行的是子类重写后的方法
    //        fz.method2();
        }
    }
    2.转型:
        1.向上转型(自动类型提升)
            int a = 10;
            double b = a;
        2.向下转型(强制类型转换)
            int a = (int)10.1;
            Zi zi = (Zi)fz;
    3.多态的利弊:
        好处:提高了程序的扩展性
        弊端:多态后不能访问子类特有的功能 要想访问 要么重新创建子类对象 要么向下转型

4.static静态修饰符:
         *:static 静态修饰符 可以修饰类的成员  成员变量 成员方法
           被static修饰的成员 不再单属于某个对象 属于类 被所有对象所共享
    1.静态内容的访问
          对象.变量名;          //不推荐
          对象.方法名(实际参数); //不推荐
          类名.变量名;
          类名.方法名(实际参数);
    2.静态的注意事项
         静态的内容优先于对象出现 所以静态只能直接访问静态
         不能访问非静态 静态方法中不可以使用this/super
    Demo:
        public class Demo01_Static {
        public static void main(String[] args) {
            Person p = new Person();
            p.name = "柳岩";

            p.age = 100;

            Person p2 = new Person();
            p2.name = "啊啊啊";

            System.out.println(p2.age);

            System.out.println("-----------------------");

            //静态成员变量的访问
            System.out.println(Person.age);

            Person.method();

            System.out.println("--------------------------");

            Demo01_Static ds = new Demo01_Static();
            ds.method();

        }
        public  void method(){

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值