Java 多态学习

一、多态的基本概念

(一) 基本概念

     1.百度百科给出的定义是:在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口

     2.在学习之后我的理解是:多态意味着父类的变量可以指向子类对象。多态是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口,使用不同的实例而执行不同操作。多态是基类型对象访问派生类重写的方法

二、继承

(一) 说明

     由于多态的很多内容都跟继承有相关,所以就先来介绍继承,然后再介绍多态。

(二) 基本概念

       1.百度百科给出的定义是:继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

       2.经过预习后我的理解是: 继承是从已有的类中派生出新的类新的类能具有已有类的数据和属性,并能扩展出新的能力。Java通常使用extends关键字来实现继承,比如说,class Parent{},class Children extends Parent{}。

(三) 基类和派生类关系

       经过预习后我对基类和派生类关系的理解是:

       如果某类B“继承”另某类A,就把这个B称为“A的子类或派生类(subclass)”,而把类A称为“B的父类”也可以称为“A是B的超类或基类(superclass)”。

       基类就是父类,派生类就是子类,比如说class A extends B{},其中的A就称为父类或者基类,B称为子类或者派生类。

(四)继承的特性

  1. 子类拥有父类非private的属性和方法。
  2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  3. 子类可以用自己的方式实现父类的方法。
  4. Java的继承不支持多继承,但是可以支持多重继承,通过单继承来实现类的继承,单继承是一个子类只能继承一个父类,多重继承是,比如说A继承B,B继承C。
  5. 继承的缺点是提高了类之间的耦合性,耦合度高就会造成代码之间的联系约紧密,代码独立性越差。

(五)构造器

        子类不继承父类的构造器,即不继承父类的构造方法或构造函数,它只是调用(隐式或显式)。
        如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
        如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参数构造器。

(六)注意事项

  1. 子类拥有父类的特征,而父类没有,父类更通用,子类更具体(特征包括属性和方法,自身的特性,拥有父类没有的)
  2. 使用extends继承父类,语句格式:class 子类名 extends 父类名{}
  3. 父类中一般只定义一般属性和方法(这个一般可以理解为是子类共有的,这就是父类更通用,而子类拥有其他的,所以子类更具体)
  4. 子类中通过super关键字来调用父构造方法
  5. 在子类中可以继承父类的哪些东西,哪些不可以继承 父类中public、protected修饰的属性和方法可以继承,private修饰的属性和方法不能被继承
  6. 规则:创建子类对象的时候,首先调用的是父类的无参构造方法创建一个父类对象
  7. 可以在子类中显示调用父类的有参构造方法
  8. 如果父类的属性均为private修饰,则可以通过共有的getter、setter方法来调用
  9. 有些编程语言支持多重继承,即一个子类别可以同时有多个父类别,比如C++编程语言;而在有些编程语言中,一个子类别只能继承自一个父类别,比如Java编程语言,这时可以利用接口来实现与多重继承相似的效果。 现今面向对象程式设计技巧中,继承并非以继承类别的“行为”为主,而是继承类别的“型态”,使得元件的型态一致。另外在设计模式中提到一个守则,“多用合成,少用继承”,此守则也是用来处理继承无法在执行期动态扩充行为的遗憾。

(七)代码实例

  • 继承的简单实现
/**
 * @author WXF
 * @data 2021-04-07
 * @description 继承的简单实现
 */

public class Debug {
   
    /** Main method */
    public static void main(String[] args) {
   
        Children children = new Children();	//
        String string = children.testChildren();
        System.out.println(string);
    }
}

// 父类
class Parent {
   
    // 父类方法
    public String testParent() {
   
        return "Parent";
    }
}

// 子类继承父类
class Children extends Parent {
   
    // 子类方法
    public String testChildren() {
   
        return "Children visit " + testParent();
    }
}

  • 继承的简单实现的输出
Children visit Parent

       解释说明:通过上面的代码,可以简单的实现继承,子类就拥有了父类的所有属性和方法,除了使用private声明的属性和方法。

  • 继承中构造器的显式和隐式
/**
 * @author WXF
 * @data 2021-04-07
 * @description 继承中构造器的显式和隐式
 */

public class Debug {
   
    /** Main method */
    public static void main(String[] args) {
   
        Children children = new Children();
    }
}

// 父类
class Parent {
   
    // 无参数构造器
    public Parent() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值