栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java继承与多态的概念(java继承和多态实验)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java继承与多态的概念(java继承和多态实验)

一、继承

    什么是继承
    继承是面向对象程序设计时使代码复用的手段,是对原有类的扩展,增加新功能,产生派生类的过程。为什么要有继承
    为了:共性的抽取,实现代码的复用。如何实现继承
    使用关键字extend
    需要注意的是:
    子类会将父类中的成员变量或者成员方法继承到子类中子类继承父类后,必须要重新添加自己特有的成员
    类内成员的访问

访问规则:遵循就近原则,子类有该成员就优先访问子类的,如果没有就在父类中找。若父类也没有就报错。当父子类中有同名成员时亦遵循此原则。
问题:那么,当父子类中有同名成员时,该如何越过子类成员的就近原则去访问父类成员呢?

    super关键字
    答案就是使用super.

super的作用:在子类方法中访问父类的成员。
super的使用禁忌:只能在非静态方法中使用;在子类方法中,访问父类的成员变量和方法

public class base{
 	int a;
 	int b;
 	public void funA(){
 		System.out.println("base的funA()");
	}
	public void funB(){
	 	System.out.println("base的funB()");
	}
 
}

public class Derived extends base{
 	int a;
 	int b;
 	public void funA(int a){  //与父类方法发生重载
 		System.out.println("Derived的funA()");
	}
	public void funB(){
	 	System.out.println("Derived的funB()");
	}
	public void funC(){
		a=100;//这里用的是子类自己的a,相当于this.a
		super.a=200;//这里获取的是继承自父类的a
		funB();//这里是Derived的funB()
		super.funB();//这里获取的是继承自父类base的funB()
	 	System.out.println("Derived的funC()");
	}
 
}


    父与子的构造方法
    在子类对象构造时,需要先调用父类构造方法,然后执行子类的构造方法。
    这么做的原因是:子类的对象同时也是一个父类的对象,在子类构造子类对象的时候,先要将从父类继承下来的成员初始化完整,然后再初始化子类自己新增的成员。

需要注意的是:

    若父类显示定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用。也就是,调用基类的构造方法。当父类构造方法是带参的话,编译器不会再给子类生成默认的构造方法,这就需要用户为子类显示定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。。。在子类的构造方法中,super()调用父类构造时,必须时子类构造函数的第一句。super()只能在子类构造方法中出现一次,且不能与this同时出现。

    super与this
    共同点:
    (1) 只能在非静态方法中使用,用来访问非静态成员方法和字段
    (2)在构造方法中使用的时候必须是构造方法下的第一句,并且不能同时出现。
    不同点:
    (1)this是对当前对象的引用,super是对父类继承下来的成员的引用。
    (2)this是被非静态成员方法隐藏的一个参数,super则不是。
    (3)this()用来调用本类构造方法,super()用来调用父类构造方法,二者不能能时出现。

    初始化时的执行顺序

父类静态代码块—>子类静态代码块–>父类实例代码块–>父类构造方法–>子类实例代码块–>子类构造方法。
注意:第二次实例化时,静态代码块将不会再执行。

    继承的方式

可以:单继承、多层继承、不同类继承同一个类;
不可以:多继承,java不支持多继承

    final关键字

(1) 当修饰变量或字段时:表示这是个不能修改的常量;
(2)当修饰类时:此类不能被继承
(3)当修饰方法时:该方法不能被重写

二、多态

    什么是多态:
    在完成某个行为的时候,当不同的对象去完成时会产生出不同的状态;在代码运行时,当传递不同对象的时候,会调用对应类的方法。

    如何实现多态
    (1)必须在继承体系下;
    (2)子类必须要对父类的方法进行重写
    (3)通过父类的引用调用重写的方法

    什么是重写

又称覆盖,是子类对父类方法的实现过程进行重写编写,返回值与形参都不能变。

重写的规则:
(1)修饰符、返回值、方法名、参数列表要完全一致;
(2)被重写的方法访问权限要大于等于父类原本方法的访问权限;
(3)static、private、final修饰的方法、构造方法都不能重写;
(4)重写的方法用@Override注释

    向上转型和向下转型

    向上转型:安全的转型,父类引用引用子类对象,可以让代码更灵活例如:

Animal cat=new Cat();

向下转型:不安全

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号