`
hm4123660
  • 浏览: 283431 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:70291
社区版块
存档分类
最新评论

java的多态性

    博客分类:
  • Java
阅读更多

            多态性是面向对象的三大特性之一.(封装,继承,多态),多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码, 让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

   

 

java多态分为:

 

1.方法的重载与重写。

 

       重载:同类中返回值和函数名相同,而参数列表不同的两个方法。

 

       重写:是子类的方法覆盖父类的方法,要求方法名和参数都相同

 

2.对象的多态性

在这里我们主要介绍对象的多态性

 

我自己的理解是小转大自动转换,大转小需要强制转换。父类大于子类

(1)父类引用指向子类实例

public class Mystring {
	
	public static void main(String[] args) {
		
		//父类大,子类小,小转大自动转换,只能调用父类也有的方法
		 person temp=new student();//父类的引用指向子类对象
		 temp.say();
		 
		 person temp1=new teacher();
		 temp1.say();
	}

}
//抽象类
abstract class person
{
    public String name; 
   
    
    public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}

	public abstract void say();//抽象方法
}
//学生类
class student extends person//继承person类
{
    //实现抽象方法
	public void say()
	{
		System.out.println("我是学生。。。。");
	
	}
}
//老师类
class teacher extends person//继承person类
{

	public void say()
	{
		System.out.println("我是老师。。。。");
	
	}
       //扩展方法
	public void sayHello()
	{
		System.out.println("Hello,我是老师。。。。");
	}
}

 执行结果:



 

(2)子类对象指向父类引用

public class Mystring {
	
	public static void main(String[] args) {
		
		//父类大,子类小,自动转换,只能调用父类也有的方法
		 person temp=new student();//父类的引用指向子类对象
		 temp.say();
		 
		 person temp1=new teacher();
		 temp1.say();
		//------------调用teacher的扩展方法sayHello()
		//父类person没有sayHello方法,不能直接temp1.sayHello()
		 
		 //子类小于父类,需要强制转换
		 teacher temp3=(teacher)temp1;
		 temp3.sayHello();
		 
	}

}
 //省略类的定义

 

执行结果:



 我觉得记住小转大自动转换,大转小需要强制转换。父类大于子类就很好理解

 

既然父类可以自动转化为子类,那我们可以利用这特性解决一个经常遇到问题

public class Mystring {	
	public static void main(String[] args) {	
		 student temp=new student();
		 say(temp);		 
		 teacher temp1=new teacher();
		 say(temp1);			 
	}
	public static void say(student temp)
	{
		temp.say();
	}
	
	public static void say(teacher temp1)
	{
		temp1.say();
	}
    //省略类的定义
}

 我们发现say()由于需要的参数不同,所以重载了两份。这样写,要是类很多,那不要重载很多份。这里我们使用对象的多态就能很好的解决。把代码改为:

public class Mystring {
	
	public static void main(String[] args) {
		
		 person temp=new student();
		 say(temp);
		 
		 person temp1=new teacher();
		 say(temp1);
	
		 
	}
	public static void say(person temp)
	{
		temp.say();
	}		
    //省略类的定义
}

   当然这样写的话,调用的方法只能是父类也有的方法,这里能性是因为父类也有say()方法。为了解决这一问题,我们引入关键字instanceof

 instanceof的基本语法为:对象 instanceof 类型-----------返回boolean值

 用来判断一个对象是否属于某和类的实例,是就返回true,否则返回false

 

下面我们在say()方法里调用teacher的扩展方法sayHello()。student和person类都没用该方法,上面代码肯定报错。这是我们可以将代码改为:

public class Mystring {
	
	public static void main(String[] args) {
		
		 person temp=new student();
		 say(temp);
		 
		 person temp1=new teacher();
		 say(temp1);
	
		 
	}
	public static void say(person temp)
	{
		//如果是teacher对象就强制转换为teacher(大转小)
		if(temp instanceof teacher)
		{
			teacher ok=(teacher)temp;
			ok.sayHello();
		}
	
	}
	
	
    //省略类的定义
}

 

父类大转小自动转换,让我想起了所有类的父类Object类,它当然是最大的啦。所有我们代码当然还可以改为:

public class Mystring {
	
	public static void main(String[] args) {
		
		 person temp=new student();
		 say(temp);
		 
		 person temp1=new teacher();
		 say(temp1);
	
		 
	}
         //使用Object类
	public static void say(Object temp)
	{
		//如果是teacher对象就强制转换为teacher(大转小)
		if(temp instanceof teacher)
		{
			teacher ok=(teacher)temp;
			ok.sayHello();
		}
	
	}
	
	
    //省略类的定义
}
//抽象类

 

   这篇博客是对我学习java多态的一个总结,也拿出来和大家分享,有什么错误还望指正。

 

 

 

  • 大小: 4.7 KB
  • 大小: 6 KB
5
5
分享到:
评论

相关推荐

    java多态性

    "Java多态性详解" Java多态性是面向对象编程的基本特征之一,它允许子类继承父类,并对父类的方法进行重写或重载,以实现更多的灵活性和可扩展性。在Java中,多态性的体现主要有两种形式:方法的重载和方法的重写。...

    java多态性练习

    Java多态性是面向对象编程中的一个重要特性,它允许我们使用父类引用指向子类对象,从而实现一种灵活的代码设计。在这个“java多态性练习”中,我们将深入探讨多态性的概念、抽象类(abstract class)以及它们在实际...

    实验二:java多态性.rar

    Java多态性是面向对象编程中的一个重要概念,它在Java中起到了关键的作用,使得程序更加灵活,可扩展性更强。本实验将深入探讨Java多态性的核心原理与应用。 首先,我们要理解多态性的基本含义。多态性...

    Java多态性实验报告

    ### Java多态性实验知识点解析 #### 实验背景与目的 本次实验主要目的是让学生通过实践操作,深入理解Java中的多态性概念,并掌握如何利用多态性实现代码的灵活性和可扩展性。实验中,学生将通过编写一个处理复数...

    Java多态性探悉()

    本文将深入探讨Java多态性的概念、实现机制以及相关的编程规则。 一、基本概念 多态性意味着一个接口可以有多种不同的表现形式。在Java中,可以通过子类对象引用赋值给超类对象引用变量来实现这一特性。这意味着,...

    Java多态性浅析.pdf

    Java 多态性是面向对象技术的三大特性之一,它通过继承中的覆盖(动态多态性)和方法的重载(静态多态性)实现的。在Java中,多态性指的是一个名词可以有多个语义。 多态性的实现 Java 的多态性可以通过两种方式...

    java多态性.pdf

    Java 多态性 Java 的多态性是面向对象编程的三个特征之一,另外两个是封装和继承。多态性是指同一个方法可以根据不同的对象而有不同的行为,或者说同一个方法可以根据不同的对象而有不同的实现。 Java 之所以引入...

    java多态性详解——父类引用子类对象.pdf

    Java 多态性详解 —— 父类引用子类对象 多态性是 Java 面向对象编程的三个特征之一,另外两个是封装和继承。多态性是指通过方法的重写、重载和动态连接来实现的。在 Java 中,多态性是为了解决单继承问题而引入的...

    【Java编程教程】详解Java 多态性.pdf

    【Java编程教程】详解Java 多态性 Java 作为一门面向对象的编程语言,其核心特性之一就是多态性。多态性使得程序在设计上具有更高的灵活性和可扩展性,允许我们以多种方式执行相同的操作。多态性这个概念来源于希腊...

    基于反射机制的数据流Java多态性实现及研究.pdf

    "基于反射机制的数据流Java多态性实现及研究" 本文主要介绍了基于反射机制的数据流Java多态性实现及研究。数据流Java是一种并行程序设计模型,它也具有面向对象程序多态的概念,反射机制允许程序运行时动态地加载一...

    编程语言java多态性.pdf

    Java多态性涉及到的关键词包括:extends(继承)、implements(实现接口)、abstract(抽象类和方法)、virtual(虚函数,C++中的概念)、Override(覆盖)、Overloading(重载)、Encapsulation(封装)等。...

    Java多态性的实现.pdf

    Java多态性的实现.pdf

    使用Java多态性实现一个简单的动物园管理系统.txt

    ### 使用Java多态性实现一个简单的动物园管理系统的知识点解析 #### 一、抽象类与抽象方法 本系统中,`Animal`被定义为一个抽象类,这意味着它不能被实例化,仅能作为其他类的基础来扩展。抽象类的存在主要是为了...

    java多态性讲解

    可以更清楚的了解java,帮助你认识java的多态性

    Java多态性之隐式重载的应用分析.pdf

    Java多态性之隐式重载的应用分析.pdf

    java类和对象继承多态性

    java类和对象继承多态性 java类和对象继承多态性是java语言中的一种基本机制,它允许开发者创建一个新的类,并继承已有的类的属性和行为。这种机制可以提高代码的复用性和维护性。 继承是java语言中的一种机制,...

    java多态性详解——父类引用子类对象

    Java的多态性是面向对象编程(OOP)的三大特性之一,它允许程序设计者以通用的方式处理不同的数据类型,增强了代码的复用性和灵活性。本文将深入探讨Java中的多态性,特别是“父类引用子类对象”的概念,以及这一特性...

    Java多态性定义与用法实例详解

    "Java多态性定义与用法实例详解" 本文主要介绍了Java多态性定义与用法,详细分析了多态的概念、功能以及Java定义与实现面向对象多态性的相关操作技巧。 一、基本概念 多态性是指发送消息给某个对象,让该对象自行...

    探索Java多态性:编程语言的瑞士军刀

    4. **多线程**:Java内置了对多线程编程的支持,允许开发者创建同时执行的多个线程。 5. **网络编程**:Java提供了丰富的网络通信API,使得开发网络应用变得容易。 6. **安全性**:Java提供了一个安全

Global site tag (gtag.js) - Google Analytics