JAVA中继承的特点和final关键字

JAVA中继承的特点

 java支持单继承,不支持多继承,java支持多层继承

           单继承:一个子类只能继承一个父类(一个孩子只能有一个亲爹)

          多继承:一个子类不能同时继承多个父类

  多层继承:A类可以继承B类,B类可以继承C类,A类中拥有B、C类中的所有属性和方法。说明:越是顶层的类,定义的功能越是共性功能,功能和属性就越少;越是底层的类,定义的特有功能和属性就越多,就更加强大。学习一个体系的时候,先学顶层的类,共性功能学习完,学习底层特有的方法即可;使用一个类创建对象的时候,选择底层的类型,功能更多更强大。

原因:如果支持多继承,那么可能一个子类继承了两个父类,两个父类中有相同的方法声明,却拥有不同的方法实现。子类继承之后,就不知道该走哪个父类的方法实现了。(安全隐患)

代码演示:

package 继承;

public class 继承的特点 {
	public static void main(String[] args) {
		ErZi er = new ErZi();
		er.show();
	}
}
class YeYe{
	public void show() {
		System.out.println("我是爷爷辈");
	}
}

class BaBa extends YeYe{
	
}
class ErZi extends BaBa{
	
}
//class NuEr extends YeYe BaBa{
//	  这里会报错
//}

输出结果:

我是爷爷辈

 所以我们可以得到上面所说特定,可以单继承、不可以多继承,但是可以多层继承。


final关键字

 

单词含义:最终的,最后的,表示不能再改变的。

final关键字:可以修饰类、方法、变量

修饰类

                 表示一个最终类,表示不能有子类,【不能被其他类继承】

                 一旦一个类型不能被继承,那么其中所有的方法都不能被重写

                 不影响当前类的方法被调用

修饰方法

                     表示一个最终方法,【该方法不能被重写】

修饰变量

                   表示一个最终变量,该【变量变成了常量】,就只能赋值一次

                   当前项目中,常用的常量一般都定义在一个类的成员位置,甚至专门定义一个常量类

                   定义常量的好处:见名知意,容易理解;可维护性高

代码演示(都在注释里了):

public class final关键字 {
	//这里声明了三个变量,但是用了final关键字,所以这三个变量就变成了常量,他们就各自代表着后面所赋予的值,值不会再被改变。
	public static final double PI = 3.1415;  			
	public static final int SECONDS_PER_MINITE = 60;
	public static final int MINITES_PER_HOUR = 60;
	public static void main(String[] args) {
		//PI = 3;    这里尝试想要修改PI的值,会报错 PI被final声明了,值不能再被修改
		SHU shu = new SHU();
		shu.show();
		shu.show2();
		
	}
}
class YE{
	public final void  show() {
		System.out.println("我是爷爷");
	}
}
class FU extends YE{
//	public void show() {     //这里就会报错,提示不能被继承
//		System.out.println("我是爷爷的儿子");
//	}
	public void show1() {
		System.out.println("我是爸爸");
	}
}
final class SHU extends YE{
	public void show2() {
		System.out.println("我是叔叔,我还要攒钱娶媳妇,不能被其他人继承");
	}
}
//class ZI extends SHU{ //这里就会报错,这个类已经不能被继承了。
//	
//}

输出结果:

我是爷爷
我是叔叔,我还要攒钱娶媳妇,不能被其他人继承

Final修饰成员变量的注意事项

1.final修饰成员变量,该成员变量必须在创建对象之前进行赋值,否则编译失败
       2.final修饰成员变量,固定的不是成员变量拥有的默认值,如果固定的是默认值,那么将导致被final修饰的成员变量的值永远无法修改,只能是默认值,这也不符合语法规则

对被final修饰的成员变量的赋值有两种实现方式
        定义成员变量的时候手动赋值
        利用构造器对成员变量进行赋值

3为什么不行?

解释:如1所描述,被final修饰的成员变量必须在对象创建之前进行赋值,如果方法3可以,那么我们知道对象创建后,才能调用方法3,也就是说成员变量利用方法3进行赋值,会导致成员变量的赋值发生在对象创建之后

5.为什么被Final修饰的成员变量必须在对象创建之前进行赋值?

理解:被final关键字修饰的东西有一个特点,那就是一旦被修饰,那么它的值也就终生不变,可见final关键字起到了固定的作用,既然起到固定那么,你就要提前告诉final固定的是谁,如果允许被final修饰的成员变量赋值发生在对象创建之后,那么对象创建完成后final固定的值还是未可知的

  6.final修饰成员变量和final修饰局部变量的区别与联系:

      ①被final修饰的成员变量与局部变量均具有:一旦赋值,该值就终身不变

      ②被final修饰的成员变量必须要在创建对象之前进行赋值,否则会编译失败,

      ③但是局部变量可以不赋值,但是没有被赋值的局部变量不能够被使用,一旦被使用就会编译失败

 .综上:一旦决定使用final关键字来修饰成员变量或者局部变量,一定要做到提前赋值

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值