7.JAVA-类继承、覆写、final关键字
2019-05-08 07:27:35来源:博客园 阅读 ()
1.JAVA继承-extends
在java中,要想实现继承则使用extends关键字.
一般子类被称为派生类,父类称为基类(super)
extends需要注意的地方:
- java不允许多重继承(一个类只能继承一个父类,不能继承多个父类)、
- 派生类会继承基类所有属性和方法,但不能直接访问基类的private私有属性
- 实例化派生类时,会先去调用父类的构造方法构造基类,再实例化自身的属性类对象,最后才是调用自身类构造方法.
- 在派生类中,有个隐藏的super,表示为基类,所以我们可以通过它指定如何构造基类
1.1 示例1-super使用
注意:super必须放在构造方法首行使用,如果用户不使用super,则编译器默认调用super()来初始化父类
代码如下:
class Parent { public Parent() { System.out.println("Parent()"); } public Parent(String str) { System.out.println("Parent(String str):"+str); } } class Derived extends Parent { public Derived() { super("123"); //调用Parent(String str)初始化父类 System.out.println("Derived()"); } } public class Test{ public static void main(String args[]){ Derived d = new Derived(); } }
打印如下:
2.JAVA继承之方法覆写
当派生类覆写基类的方法时候,要遵守方法的权限,返回值以及参数都一致.
如果派生类覆写的基类方法是private的,则不能实现覆写功能,因为基类的private方法是不可见的(参考2.2示例)
派生类覆写方法,一般用于基类的方法不满足当前派生类功能实现时,才会去覆写.
2.1 示例1-覆写
代码如下:
class Parent { public void func(int i) { System.out.println("Parent::func()"); } } class Derived extends Parent { public void func(int i) //覆写父类的func方法 { System.out.println("Derived::func()"); } } public class Test{ public static void main(String args[]){ Derived d = new Derived(); d.func(1); } }
2.2示例2-派生类private无法实现覆写
先来个正常覆写的代码:
class Parent { public void func() { System.out.println("Parent::func()"); } public void print() { func(); } } class Derived extends Parent { public void func() //覆写父类的func方法 { System.out.println("Derived::func()"); } } public class Test{ public static void main(String args[]){ Derived d = new Derived(); d.print(); } }
如下图所示,打印派生类的func():
然后将Parent的func()改为private:
private void func() { System.out.println("Parent::func()"); }
如下图所示,则打印基类的func():
2.3JAVA继承之如何通过派生类调用基类被覆盖的方法
在上面第1节,我们讲过派生类中有个隐藏的super,表示为基类.所以当基类被覆写的方法时,我们可以通过super来调用基类的方法.
示例-super调用基类方法
class Parent { public void func() { System.out.println("Parent::func()"); } } class Derived extends Parent { public void func() //覆写父类的func方法 { super.func(); //调用父类的func,如果不加super,则会出现一直递归 System.out.println("Derived::func()"); } } public class Test{ public static void main(String args[]){ Derived d = new Derived(); d.func(); } }
打印如下:
3.final关键字
在java中,final被称为终结器, final可以修饰变量,方法和类.
3.1 final修饰类
当final修饰类时,则表示该类为最终的,也就是说该类不能再有子类了,示例如下:
final class A { // 修饰该类不能有子类 } class B extends A { // 错误的继承 }
3.2 final修饰方法
当在某个类的方法前面定义final时,则表示该方法不允许在子类里进行方法覆写(可以实现方法重载)
示例如下:
class A { public final void fun() {} //此方法不允许子类覆写 public void fun(int i) {} //可以实现方法重载 } class B extends A { public void fun() {} // 错误:此处不允许覆写 }
3.3 final修饰变量
当final修饰变量时,则表示该变量为常量(类似C++中const).示例如下:
public static final String LICENSE = "GPL"; //修饰全局常量,定义常量时,名称需大写
下章学习: 8.JAVA-向上转型、向下转型
原文链接:https://www.cnblogs.com/lifexy/p/10811531.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- Java--Java的继承性 2020-05-26
- java“单根继承结构” 2020-05-17
- Java程序员如何了解继承和接口这两个概念 2020-05-07
- java 子类与父类 2020-05-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash