`
不平凡的人
  • 浏览: 35225 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论

多态小结

 
阅读更多

看了关于thinking in java的书籍对于多态写一下自己的理解

一.多态时成员变量的特点:

1.不管是静态成员变量,非静态成员变量以及final成员变量都不具备多态性

2.简单理解:即编译时看父类型所对应的类是否有该变量如果有编译通过,如果没有编译失败;运行时变量值取自父类型对应的变量的值;一般来成员变量都为私有,只能在本类中修改成员的值

 

package net.oschina.tkj.chapter8.extend;
/**
 * 父类
 * @author Freedom
 *
 */
public class ParentClass {

	public int field = 1;
	
	private static int fieldStatic= 1;
	
	public final int fieldFinal = 1;
	
	public ParentClass(){
		System.out.println("parent constructor test domain begin...");
		System.out.println("parent field:"+field+" parent fieldStatic:"+fieldStatic+ " parent final field:"+fieldFinal);
		System.out.println("parent constructor test domain end...");
	}
}

package net.oschina.tkj.chapter8.extend;
/**
 * 子类
 * @author Freedom
 *
 */
public class SonClass extends ParentClass {

	public int field = 5;
	
	private static int fieldStatic = 5;
	
	public SonClass(int field){
		System.out.println("son field:"+field);// 就近原则取了参数的值
		System.out.println("son field init:"+this.field);// 创建对象时,显示初始化在默认初始化之后,在构造器对参数初始化之前
		System.out.println("son constructor test domain begin...");
		System.out.println("son field:"+field+" parent fieldStatic:"+fieldStatic+"  son final field:"+fieldFinal);
		System.out.println("son constructor test domain end...");
	}
}

 

3.变量赋值的时机

3.1 静态成员变量(类变量):随着类的加载而加载,同时为变量赋值;

3.2成员变量以及final类型的成员:随着对象的创建而存在,首先进行默认初始化赋值,如:基本数据类型int默认值为0,引用类型变量默认值为null;接着在调用父类默认空参构造器之后,进行变量的显示初始化,最后是构造器的特殊初始化

 

二.多态时成员函数特点

1.静态成员函数:对于静态成员函数来说不具备多态性,不能被子类重写

简言之,在多态时调用静态函数,编译时期看父类型对应的类中是否有该函数,如果没有编译失败,运行时执行的也是父类型对应类中的静态函数

如:下列所示

 

package net.oschina.tkj.chapter8.extend;
/**
 * 父类
 * @author Freedom
 *
 */
public class ParentClass {
	public static void method(){
		System.out.println("parent method() run.");
	}

}

package net.oschina.tkj.chapter8.extend;
/**
 * 子类
 * @author Freedom
 *
 */
public class SonClass extends ParentClass {
	
	// 子类不能重写父类的静态方法,所以该方法为子类自己的方法
	public static void method(){
		System.out.println("son method() run.");
	}
	
}

 运行结果:

 


 

2.非静态函数

如下例子:

package net.oschina.tkj.chapter8.extend;
/**
 * 父类
 * @author Freedom
 *
 */
public class ParentClass {

	/*
	 * 父类中该方法为私有
	 */
	private void f(){
		System.out.println("parent f()");
	}

	public static void main(String[] args) {
        ParentClass clazz = new SonClass(7);
        clazz.f();
	}
}

package net.oschina.tkj.chapter8.extend;
/**
 * 子类
 * @author Freedom
 *
 */
public class SonClass extends ParentClass {
	
	/*
	 * 子类中创建一个与父类名一样的方法,只是访问权限为public
	 */
	public void f(){
		System.out.println("parent f()");
	}
	
}

 

运行结果:

因为父类中f()为私有方法,因此在父类执行main函数



 

上述情况,因为父类的方法为私有,相当于给父类方法加了final,子类无法继承该方法。因此,子类中相同名称的方法,就是一个新的方法(实际开发不建议父类方法名与子类方法名相同阅读性较差)。

因此,多态的前提条件:①类之间需要继承②重写父类的方法(父类的私有方法,静态方法以及final关键字修饰的方法不能被重写)

2.1 满足多态前提时调用一般函数,编译时看父类型对应的类中是否有该方法,如果没有编译错误;运行时,调用子类中的重写的方法

 

 

 

  • 大小: 8 KB
  • 大小: 7 KB
分享到:
评论

相关推荐

    java多态小结

    ### Java多态详解 #### 什么是多态? 多态(Polymorphism)是面向对象编程的一个核心特性,指的是一个接口可以被多个类所实现或一个类可以被多个类所继承,进而表现出不同的行为。在Java中,多态主要体现在两个...

    C#继承和多态的应用

    C#继承和多态的应用

    Java 语言程序设计:第5章接口多态.ppt

    5.7 本章小结 本章主要讲解了 Java 语言程序设计中接口和多态的概念、语法和应用。接口是一种抽象机制,提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。多态...

    Lesson06--OOP多态.pdf

    #### 小结 通过学习多态的基本概念、抽象类和抽象方法的使用、以及多态的实际应用,我们可以更好地理解和利用面向对象编程中的多态特性。多态不仅提高了代码的灵活性和可维护性,还使得代码更加易于扩展和重用。在...

    详解java接口、继承和多态

    #### 四、小结 - **接口**:定义了一组方法签名,由其他类实现具体的方法体。 - **继承**:支持代码复用,子类可以继承父类的属性和方法,并可以扩展或覆盖父类的功能。 - **多态**:允许父类引用指向子类对象,...

    Java 学习课件,继承和多态

    #### 小结 - **继承与多态是Java面向对象编程的核心概念**。正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖...

    上转型对象体现多态

    ### 小结 上转型对象在Java中体现了多态性的强大功能,它是面向对象编程的一个重要方面。通过合理地利用多态性,可以编写出更加灵活、可扩展的代码。此外,遵循面向对象设计原则并适当使用设计模式,可以帮助开发者...

    Java学习课件第5章接口与多态.ppt

    **5.7 本章小结** 接口和多态是Java面向对象编程的核心概念,它们提供了灵活的设计和实现策略,使得代码更加模块化,易于维护和扩展。通过理解和掌握这些概念,开发者可以编写出更加高效、可读性强的Java程序。

    Java中类的继承学习小结

    下面是对"Java中类的继承学习小结"的详细讲解。 首先,类的继承使用关键字`extends`来实现。子类(也称为派生类)声明时,会指定一个父类(或超类): ```java public class DerivedClass extends BaseClass { //...

    关于C++知识点的一些小结

    在C++编程语言中,多态(Polymorphism)是一个非常关键的概念,它允许我们使用一个接口来表示多种类型的数据,极大地增强了代码的灵活性和可扩展性。下面将详细阐述多态的各个方面。 1. 概念: 多态是指一个接口...

    完整版精品java教程 清华大学新版Java课件 Java语言程序设计(第2版) 第5章 接口与多态(共89页).pptx

    5.7 本章小结 本章通过详细的讲解和示例,帮助学习者理解接口的定义、作用、语法,以及如何实现接口和利用多态进行程序设计。通过这些内容的学习,读者可以掌握Java中面向对象的重要特性,为后续的JDBC、Servlet、...

    C++ 虚函数与多态 教学PPT

    6.5 小结 多态性是C++面向对象编程的重要特性,通过虚函数、纯虚函数和抽象类,开发者可以创建灵活的代码结构,实现更高效的设计。理解并熟练掌握多态性,能够帮助编写出更加模块化、可扩展的软件。

    C++编程思想习题

    1.7小结 第2章 数据抽象 2.1声明与定义 2.2一个袖珍C库 2.3放在一起:项目创建工具 2.4什么是非正常 2.5基本对象 2.6什么是对象 2.7抽象数据类型 2.8对象细节 2.9头文件形式 2.10嵌套结构 2.11小结 2.12练习 第3章 ...

    北大自考高级语言上机小结

    【标题】:“北大自考高级语言上机小结”揭示了在北大自学考试中,针对高级编程语言(如C++、Java或Python等)的上机实践环节的重要性。这一小结可能涵盖了考试中的核心概念、编程技巧以及解决问题的策略。 【描述...

    c++,继承,多态,虚函数,纯虚函数

    ### 小结 通过继承机制,可以有效地重用代码并构建具有层次结构的类体系。而通过虚函数和纯虚函数的使用,能够实现真正的多态性,即同一接口可以在不同类中有不同的实现,提高了代码的灵活性和可扩展性。这些特性都...

    java课程小结.rar_北京理工大学JAVA课程

    这个“java课程小结.rar_北京理工大学JAVA课程”压缩包中包含的“课程小结”文件,很可能是教授精心编写的教学精华,旨在帮助学生巩固所学知识并为后续学习打下坚实基础。 在Java课程中,有几个核心概念和技术是必...

    数据库 ORACLE_8_初学者指南1.rar

    1.2.2 开端小结 1.2.3 今天的Oracle 1.3 Oracle8服务器 1.3.1 为什么Oracle拥有今天的地位 1.3.2 Oracle7/8服务器的组件 1.4 SQL*Plus—友好的用户接口 1.5 Oracle Forms—前端产品 1.6 Oracle Reports—报表生成器 ...

    数据库 ORACLE_8_初学者指南2

    1.2.2 开端小结 1.2.3 今天的Oracle 1.3 Oracle8服务器 1.3.1 为什么Oracle拥有今天的地位 1.3.2 Oracle7/8服务器的组件 1.4 SQL*Plus—友好的用户接口 1.5 Oracle Forms—前端产品 1.6 Oracle Reports—报表生成器 ...

    WTL提纲性小结

    这与MFC的运行时多态形成了鲜明对比,运行时多态依赖虚函数表,在运行时确定对象的实际类型,而编译时多态则在编译阶段就决定了类型信息,从而避免了运行时的动态分派开销,提高了程序的执行效率。 #### 类层次结构...

Global site tag (gtag.js) - Google Analytics