黑马程序员-关于类的继承问题与final关键字的一些感悟

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

在面向对象的语言中,类的继承无疑给编程带来更高的效率,所谓继承就是在定义新的类时,在已有类的基础上再定义些新的成员变量,只需通过extends继承原有类的方法和变量,原有的类我们就叫父类,新的类叫做子类。在java,关于类的继承有它自己特有的规则,本人在此做个小小的总结吧。

 1,java不支持多重继承,也就是说子类至多只能有一个父类,简单地讲打个比方,a是子类它的父类如果是b,则不会再有其它的父类。就像一个儿子只能有一个生你的爸爸一样。

2,可以多层继承,形象点讲就是A继承了B,B继承了C,那么A间接就继承了C。

3,子类中继承父类中非私有的成员变量和成员方法,但不继承构造方法,如果子类想继承父类的构造方法可以用super()来调用。

4,子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。

5,子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。其实这个时候这个父类的方法被覆盖了。这个时候若想再调用父类中那个被覆盖的方法可以用super关键字。这里多说一句,覆盖父类中方法时,子类中的方法的访问权限不能比父类更严格。

现在来讲一下final关键字。

首先要说明的是在java中对类,方法,变量的声明都可以用final来修饰的。

1,类中的应用。

final修饰的类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。我们在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会被扩展,那么我们就可以加final关键字来修饰。

2,变量的应用

 用final修饰的成员变量表示常量,而且只能赋值一次!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。一旦给final变量赋初值后,值就不能再改变了。另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为空白final,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,空白final在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同, 却有保持其恒定不变的特征。

3,方法中的应用

如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。也就是说,final修饰的方法不能被子类重写。方法中定义的内置类只能访问该方法内的final类型的局部变量。

使用final方法的原因有二:

第一、把方法锁定,防止任何继承类修改它的意义和实现。

第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

例如:

public class  Test1 {

public static  void main(String[] args) {

}

public void  f1() {

System.out.println("f1 ");

}

}

//无法被子类覆盖的方法

public final void f2() {

System.out.println("f2");

}

public void f3() {

System.out.println("f3"); }

private void  f4() {

System.out.println("f4 ");

}

}

public class Test2 extends  Test1 {

public void f1(){

System.out.println(" Test1父类方法f1被覆盖!" );

}

public static void main(String[] args) {

Test2 t = newTest2();

t.f1();

t.f2();

//调用从父类继承过来的final方法

t.f3();

//调用从父类继承过来的方法

//t.f4();

//调用失败,无法从父类继承获得

}

4,在参数中的应用

我们可以将形参用final来修饰,但这样我们就无法在方法中修改它了。例如:

public class  Test2{

public static void  main(String[] args) {

newTest1().f1(1);

}

public void f1( final int i)

{

//i++;    i是final类型的,值不允许改变的.

System.out.print(i);

    }

以上算是对final关键字和类的继承一些简单的感悟吧。

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
### 回答1: Java中的final关键字可以用来修饰、方法和变量。 - 修饰:使用final修饰的不能被继承。 - 修饰方法:使用final修饰的方法不能被子类重写。 - 修饰变量:使用final修饰的变量只能被赋值一次,之后不能再次赋值。 继承和多态的关系与final关键字也有关系,因为final修饰的和方法不能被继承和重写,所以它们不能够参与到多态的运算中。 ### 回答2: 在 Java 语言中,final 关键字是用来修饰、方法和变量的。它的作用是让这些元素可以被视为一种常量,即一旦定义final 元素,程序就不能对其进行更改。 在继承方面,final 关键字可以用来修饰和方法,表示这些元素不可被继承或重写。使用 final 修饰时,该子类不能继承它;使用 final 修饰方法时,子类不能重写该方法。这种方式可以保护程序的稳定性和安全性。 另外,final 还可以用来修饰变量。在这种情况下,变量的值不能被修改。如果变量是基本数据型,那么 final 就表示常量;如果变量是引用数据型,那么 final 就表示指向对象的引用不能被更改,但是对象内部的值可以被更改。这种方式可以保护程序中重要的数据不受篡改。 使用 final 关键字可以提高程序的安全性和稳定性,减少程序中出现不必要的错误和漏洞。不过要注意,在使用 final 修饰变量时,要保证它的值只在初始化时被设置,否则会出现编译错误。 继承和多态是 Java 中非常重要的概念,使用 final 可以更好地维护它们的语义,尤其是在程序复杂度高或团队开发时,可以避免出现可怕的问题。 ### 回答3: 在Java编程语言中,final关键字有着重要的作用。如果用在变量的声明之前,final意味着变量值只能赋值一次,即常量。因此,一旦变量被赋值,它们的值便是不可更改的。如果用在或者方法的声明之前,final表示它们是不可继承或者重写的。 在继承方面,final关键字可以禁止子类覆盖父的方法。这样,父方法的行为就被固定了,而子类无法改变它们的实现方式。这样做可以确保代码的稳定性和安全性,使得代码更加易于维护和管理。 在多态方面,final关键字可以保证变量的值在运行时不可改变,并且保证和方法的行为与编译期望一致。这个机制可以在程序的执行过程中,保证方法的参数不会被改变,从而防止了潜在的危险或错误。 总的来说,final关键字可以在Java编程中实现对常量、、方法的保护,防止程序无法预料的变化,可以保证代码的稳定性和可维护性。同时,它对继承和多态也有着重要的影响,可以保证子类和父之间的关系和方法的行为在整个程序执行过程中始终如一,大大降低了程序出错的概率,让Java编程更加易于管理和控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值