• 09-01 Java final,多态,抽象类,接口


    final

    /*
        final可以修饰类,方法,变量
        
        特点:
            final可以修饰类,该类不能被继承。
            final可以修饰方法,该方法不能被重写。(覆盖,复写)
            final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。
            
        常量:
            A:字面值常量
                "hello",10,true
            B:自定义常量
                final int x = 10;
    */
    
    //final class Fu //无法从最终Fu进行继承
    
    class Fu {
        public int num = 10;
        public final int num2 = 20;
    
        /*
        public final void show() {
        
        }
        */
    }
    
    class Zi extends Fu {
        // Zi中的show()无法覆盖Fu中的show()
        public void show() {
            num = 100;
            System.out.println(num);
            
            //无法为最终变量num2分配值
            //num2 = 200;
            System.out.println(num2);
        }
    }
    
    class FinalDemo {
        public static void main(String[] args) {
            Zi z = new Zi();
            z.show();
        }
    }

    final修饰变量的特点:

    /*
        实例:final修饰局部变量的问题
            基本类型:基本类型的值不能发生改变。
            引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。
    */
    class Student {
        int age = 10;
    }
    
    class FinalTest {
        public static void main(String[] args) {
            //局部变量是基本数据类型
            int x = 10;
            x = 100;
            System.out.println(x);
            final int y = 10;
            //无法为最终变量y分配值
            //y = 100;
            System.out.println(y);
            System.out.println("--------------");
            
            //局部变量是引用数据类型
            Student s = new Student();
            System.out.println(s.age);
            s.age = 100;//对象的堆内存是可以改变的
            System.out.println(s.age);
            System.out.println("--------------");
            
            final Student ss = new Student();
            System.out.println(ss.age);
            ss.age = 100;
            System.out.println(ss.age);
            
            //重新分配内存空间
            //无法为最终变量ss分配值(地址值)
            ss = new Student();
        }
    }

    final修饰变量的初始化时机

    /*
        final修饰变量的初始化时机
            A:被final修饰的变量只能赋值一次。
            B:在构造方法完毕前。(非静态的常量)
            C:定义的时候就要赋值(静态的常量)
    */
    class Demo {
        //int num = 10;
        //final int num2 = 20;
        
        int num;
        final int num2;
        
        {
            //num2 = 10;
        }
        
        public Demo() {
            num = 100;
            //无法为最终变量num2分配值
            num2 = 200;
        }
    }
    
    class FinalTest2 {
        public static void main(String[] args) {
            Demo d = new Demo();
            System.out.println(d.num);
            System.out.println(d.num2);
        }
    }
  • 相关阅读:
    hadoop 2.7 添加或删除datanode节点
    hadoop HA集群的安装
    Linux-PAM认证
    [Notice]博客地址转移 vitostack.com
    WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
    python2.7 倒计时
    Hadoop Streaming框架使用(二)
    Hadoop错误码速查
    Hadoop Streaming框架使用(一)
    python清空列表的方法
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6816572.html
Copyright © 2020-2023  润新知