JAVA学习第十二课(关键字三final:针对extends打破封装性)

final:

final 可以修饰类、方法、变量

final 修饰的类不可以被继承

final 修饰的方法不可以被覆盖

final 修饰的变量是一个常量,只能被修饰一次

内部类只能访问被final修饰的局部变量

继承的弊端:

如下代码:

class father
{
	void show()
	{
		System.out.println("ni hao ");//父类的方法已经调用了底层系统
	}
}
class son extends father
{
	void show()
	{
		System.out.println(" no ");//子类一覆盖,父类原有的功能挂了
	}
}
public class Main
{
	public static void main(String[] args)
	{
		son s = new son();
		s.show();
	}
}

故:继承有弊端,它打破了封装性。

所以针对继承的弊端,采用final关键字,final class father{},那么father类就无法被继承

但是想要继承类,但是不想让其中某些方法被继承,那么就用final修饰方法,那么方法就无法被继承

还有final修饰的变量,final x = 9变成一个常量,也就是把该变量固定住了,类似于const int  x = 9;

且只能被赋值一次

class father
{
   void show()
	{
	   final int x = 9;
	   x = 10;//编译失败
		System.out.println(x);
	}
}
class father
{
   void show()
<span style="white-space:pre">	</span>{
	 final int x;//编译失败,因为没有初始化,对于成员而言,有默认初始化值,而final固定的是显示初始化值
		System.out.println(x);

	}
}

class father
{
   void show()
	{
	   final int x;
	   x = 10;
		System.out.println(x);
		x = 10;//编译失败
	}
}

用final 修饰的不行变化的变量,在开发中常用

变量的书写规范

java中书写格式:

变量:如果由多个单词所组成,第一单词首字母小写,从第二个单词首字母开始每个单词首字母大写,书写格式和函数一样

常量:所有字母都大写,如果单词不唯一,单词与单词之间用下划线连接 double  MY_PI;

如果某个值固定不变,就没必要每个对象都知道,那么这个数据就说明可以是被共享的

class father
{
	static final int x = 8;//所以可以用static修饰,成员如果被final了,一般都会加static
   void show()
	{

		System.out.println(x);
	}

}

这样就可以直接被类名使用

class father
{
	static final int x = 8;

}
public class Main
{
	public static void main(String[] args)
	{

		System.out.print(father.x);
	}
}

如果只在本类中使用

class father
{
	private static final int x = 8;

}

全局常量

class father
{
	public static final int x = 8;

}

为什么要用final修饰变量,在程序中如果一个数据是固定的,那么直接使用这个数据就可以了,但是这个数据的阅读性差,这个数据还要屡次写,一旦要更改数据,书写起来较麻烦,所以加final 给这个数据起个名字,这个名字就代表了这个数据,书写方便,方便修改

时间: 2024-10-01 17:30:39

JAVA学习第十二课(关键字三final:针对extends打破封装性)的相关文章

JAVA学习第二十二课(多线程(二))- (多线程的创建方式一 :继承Thread类)

线程是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写Thread 类的run 方法.另一种方法是声明实现 Runnable 接口的类.该类然后实现run 方法. 创建线程方式一:继承Thread类 一.创建线程的步骤: 1.定义一个类继承Thread类 2.覆盖Thread中的run()方法 3.直接创建Thread类子类的对象 4.调用start方法开启线程,并调用线程的任务run方法

JAVA学习第十八课(异常及其思想 (一) )

异常:重要知识点 异常处理的代码简单,重要还是理解其思想 一.概述: 异常就是在运行时发生的不正常情况 Throwable: Error 通常出现重大问题如,运行的类不存在或者内存溢出等 不编写针对代码对其处理 Exception 在运行时运行出现的一起情况,可以通过trt catch finally Exception和Error的子类名都是以父类名作为后缀 异常举例:数组越界.传递参数错误啊... class Futime { } class Bigtime { } public class

JAVA学习第十五课(多态及其基本应用)

多态: 面向对象的第三个特征,定义:某类事物存在多种形态,比如,函数就具备多态性,同名的一个函数,它的参数列表不一样,它的存在性就不一样,还有同一个函数,放在父类和放在子类,它的存在性也就不一样. 对象也存在多态性. 例子:动物有猪.猫.狗等 猫这个对象对应的类是猫类 猫 x = new 猫(): 同时,猫还是动物的一种,也就可以把猫成为动物 动物 y = new 猫(); 动物 z = new 狗(); 动物是狗和猫集体事物中抽取出来的父类 父类引用指向了子类对象 一.概述 //对象的多态性

JAVA学习第二十四课(多线程(三))- 线程的同步

继续以卖票为例 一.线程安全问题的解决 同步的第一种表现形式:同步代码块 思路: 将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程是不允许参与运算的,必须要当期线程把代码执行完毕后,其他线程才可以参与运算 在java中用同步代码块解决这个问题 同步代码块格式: synchronized(对象) { 需要被同步的代码部分 } class Ticket implements Runnable { private int num = 100; Object god = ne

JAVA学习第十九课(java程序的异常处理 (二))

异常处理的捕捉形式: 这是可以对异常进行针对性处理的方式 六.try.catch的理解 具体格式: try { //需要被检测异常的代码 } catch(异常类 变量)//改变量用于接受发生异常的对象 { //处理异常的代码 } finally { //一定会被执行的代码 } 这三个代码块是一个整体. try是尝试,catch捕捉,finally最终化   什么时候用try&catch,什么时候用抛? 在定义功能时,如果这个问题你可以处理的了,那么就用try&&catch,处理不了

JAVA学习第二十九课(经常使用对象API)- String类

多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 public class Main { public static void main(String[] args) { Demo1(); System.out.println("--------------"); Demo2(); } /*演示字符串的第一种定义方式,并明白字符串常量池的特点*/

JAVA学习第二十六课(多线程(五))- 多线程间的通信问题

一.线程间的通信 实例代码: 需求是:输入一个姓名和性别后,就输出一个姓名和性别 class Resource { String name; String sex ; } class Input implements Runnable { Resource r; Input(Resource r) { this.r = r; } public void run() { int x = 0; while(true) { synchronized (r) { if(x==0) { r.name =

JAVA学习第十六课(内部类及其特点)

内部类: 内部类就是一个类定义在一个类里,定义在类中的类就叫做内部类 一.访问特点: 内部类可以直接访问外部类的成员,包括私有成员 外部类要访问内部类的成员,必须创建内部类的对象 简单体现: import out.in; class out { private int num = 3; class in { public void showou() { System.out.println(num); } } public void showin() { in BLF = new in(); B

JAVA学习(十二)

一.字符串类String 1.String是一个类,位于java.lang包中 2.创建一个字符串对象的2种方式: String 变量名="值"; String 对象名=new String("值"); 3.字符串的常用方法 3.1 字符串长度--length() 3.2 判断值是否相等 equals() 3.3 判断字符串对象地址是否相同 == 3.4 忽略 大小写 判断 equalsIgnoreCase() 3.5 大小写转换 toLowerCase()--小写