• 《java入门第一季》之面向对象(final关键字)


    /*
    	final可以修饰类,方法,变量
    	
    	特点:
    		final(可以修饰类),该(类)(不能被继承)。一旦修饰了一个类,这个类就不能被继承了!
    		final以修饰方法,该方法可以被继承但是不能被重写。(覆盖,复写)
    		final可以修饰变量,该变量可以被继承但是不能被重新赋值。因为这个变量其实是常量。
    		
    	常量:
    		A:字面值常量
    			"hello",10,true
    		B:自定义常量
    			final int x = 10;
    */
    
    //final class Fu //无法从最终Fu进行继承,final是最终类,最终类是无法被继承的哦
    
    class Fu {
    	public int num = 10;
    	public final int num2 = 20;
    	
    }
    
    class Zi extends Fu {
    	public void show() {
    		num = 100;//注意这里是,num=100;不是int num = 100.该语句改变了num的值,即使使用super.num结果仍然是100(因为被重新赋值了)。没有被final修饰,不是最后的变量,还可以被重新赋值。
    		System.out.println(this.num);
    		System.out.println(super.num);
    		
    		//无法为最终变量num2分配值,该变量不能被重新赋值。因为这个变量其实是常量
    		//num2 = 200;
    		System.out.println(num2);
    	}
    }
    
    class FinalDemo {
    	public static void main(String[] args) {
    		Zi z = new Zi();
    		z.show();
    	}
    }
    
    
    


    /*
    	final修饰变量的初始化时机
    		A:被final修饰的变量只能赋值一次。
    		B:在构造方法完毕前。(条件是非静态的常量)
    */
    class Demo {
    	//int num = 10;
    	//final int num2 = 20;//常量,无法为最终变量num2分配值
    	
    	int num;
    	final int num2;//这样定义再给值是没有问题的
    	
    	{
    		num2 = 10;//num2赋值只能给一次
    	}
    	
    	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);
    	}
    }

    /*
    	继承的代码体现
    	
    	由于继承中方法有一个现象:方法重写。
    	所以,父类的功能,就会被子类给覆盖调。
    	有些时候,我们(不想让子类去覆盖掉父类的功能),(只能让他使用),final修饰之后只能被继承不能被重写。
    	这个时候,针对这种情况,Java就提供了一个关键字:final
    	
    	final:最终的意思。常见的是它可以修饰类,方法,变量。
    */
    class Fu {
    	public final void show() {
    		System.out.println("这里是绝密资源,任何人都不能修改");
    	}
    }
    
    class Zi extends Fu {
    	// Zi中的show()无法覆盖Fu中的show(),父类中的方法加上final后,子类没法对该方法进行重写了.报错
    	public void show() {//报错
    		System.out.println("这是一堆垃圾,你重写show方法就回报错");
    	}
    }
    
    class ZiDemo {
    	public static void main(String[] args) {
    		Zi z = new Zi();
    		z.show();
    	}
    }


  • 相关阅读:
    03--软件包管理工具 apt
    02--linux操作系统基础学习笔记
    01--vim常用快捷键
    00--Linux常用命令大全
    07 --C语言字符串函数
    06--C语言数学函数
    (备忘)Rect和RectF的区别
    在android程序中加入widget(窗口小部件)并与之交互的关键代码
    (原)android的alertdialog中加入edittext但是不弹出软键盘等问题的解决与原因
    (转)dp和dip是同一个单位
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299861.html
Copyright © 2020-2023  润新知