java回顾之多态

java引用变量有两个类型,一个是编译时类型,一个是运行时类型。
编译时由申明该变量时候使用的类型决定,比如Fruit duotai;
运行时由实际赋给该变量的对象决定,比如duotai=new Apple();
这就呈现了多态。

class Book {
	public String name="Book";
	public void base()
	{
		System.out.println("书籍");
	}

    public void open()
    {
    	System.out.print("这是一本普通的书籍");
    }
}

public  class Java extends Book
 {
	 public String name="Java";
     public void open()
     {
    	 System.out.println("这是JAVA");
     }
     public void go()
     {
    	 System.out.println("java方法");
     }
     public static void main(String[] args)
     {
    	 Java book=new Java();
    	 Java java=new Java();
    	 java.open();
    	 System.out.println("-------------------------------");

    	 Book duotai=new Java();
    	 //这里输出Book,表示访问的事父类的实例变量,并不是Java,原因是实例变量不具有多态性,实例方法具有多态性
    	 System.out.println(duotai.name);
    	 //这是由父类继承来的base()方法
    	 duotai.base();
    	 //这是子类自己的方法
    	 duotai.open();
    	 //编译时是父类,没有子类方法,所以会出错
    	 //duotai.go();

     }
 }

这是JAVA
-------------------------------
Book
书籍
这是JAVA

  因为子类是个特殊的父类,所以可以把子类直接赋给父类引用变量,无需任何强制类型转换,被称之为向上转型,系统自动完成,引用变量

只能调用它编译时类型的方法,即使这对象确实包含运行时的方法。如果需要调用运行时方法,则需要把它强制转换成运行时的类型,需要借助类型转换运算符=》(type)variable

强制类型转换需要继承关系。

public class ConversionTest {
	Object ob="hellow";//编译时为Object,运行时为String,存在继承关系,可以强制类型转换
	String obStr=(String)ob;//ob确实为子类实例,运行通过

	Object object=new Integer(5);//存在继承关系
	//但是运行类型为Integer,不是子类实例类型,所以不能强制转换,
	String str=(String)object;//失败,出现异常
	//考虑到会出现异常,所以强制类型转换前通过Instanceof运算符来判断是否可以进行强制转换
	public void InstanceTest()
	{
		if(object instanceof String)
		{
			String str=(String)object;
		}
	}

}

  

时间: 2024-10-25 06:37:50

java回顾之多态的相关文章

java 小结2 多态问题。

面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运行时多态 (1)编译时多态比较容易理解:其实就是通过方法重载,就是方法的重载,同一个函数名但是可以参数不一样.这就是重载(so easy) (2)运行时多态:这个是通过方法覆盖实现的,就是子类在继承父类的时候,通过对某个方法的重写,覆盖父类方法. 简单的说:比如我们有个父类A,子类B通过Extend

java继承和多态

java方法直接调用原理推测 有错误还望指正 当直接调用某对象的某方法时  会更具该对象获取到类信息对象   在从类信息对象中找到该方法 没找到 获取父类信息对象继续查找 找到了执行  jdk距离实现是通过反射还是其它? 如果按以上原理    以下情况解释不通 创建一子类对象  赋值给一父类指针变量  通过父类指针变量掉run方法   run方法在父类或子类中为私有  这种情况调用的是父类的run方法 并非子类的run方法 反射jar包 package extend; import org.ju

Java继承,多态,组合应用

继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)   泛化: 把子类中的共性抽取到父类的过程; 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;    Object: 是所有类的直接父类后间接父类;      class  Student{} 等价于  class  Student extends Object{

Java基础十一--多态

Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. 1 /* 2 3 对象的多态性. 4 5 class 动物 6 {} 7 8 class 猫 extends 动物 9 {} 10 11 class 狗 extends 动物 12 {} 13 14 15 16 猫 x = new 猫(); 17 18 动物 x = new 猫();//一个对象,两种形态. 19 20 21 22 猫这类事物即具备者猫的形态,

Java类的多态机制

Java中将一个方法调用同一个方法主体关联起来被称作绑定.绑定分为前期绑定和后期绑定.前期绑定是在编译器决定的,而后期绑定是在程序运行时决定的.Java中除了static方法和final方法(private方法也是final方法,只不过是隐式的为final)之外,其他所有的方法都是后期绑定.Java类的多态指的是当将子类向上转型为父类型并调用父类型中相应的方法时,多态机制会根据动态绑定自动判断出调用相应的子类的方法.也就是说多态机制的存在的基础是子类实现了对父类中相应方法的函数覆盖.比如有一个S

Java回顾之Spring基础

第一篇:Java回顾之I/O 第二篇:Java回顾之网络通信 第三篇:Java回顾之多线程 第四篇:Java回顾之多线程同步 第五篇:Java回顾之集合 第六篇:Java回顾之序列化 第七篇:Java回顾之反射 第八篇:Java回顾之一些基础概念 第九篇:Java回顾之JDBC 第十篇:Java回顾之ORM框架 我计划分两到三篇文章来描述Spring,这一篇主要讲Spring一些基础的内容. 概述 我印象4.5年前,我还做java开发的时候,Spring是一个非常火的框架,尤其是在Web开发领域

java中实现多态的机制是什么?

多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本.尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念. Java中的多态总是子类型

Java 继承和多态

                                                    Java  继承和多态 Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 生活中的继承: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类. 食草动物和食肉动物又是属于动物类. 所以继承需要符合的关系是:is-a,父

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/* 样例1: class Parent{ int num = 3; } class Child extends Parent{ int num = 4; } */ /* 样例2: class Parent{ } class Child extends Parent{ int num = 4; } */ /* 样例3: class Parent{ void show(){ System.out.println("Parent Show!"); } } class Child exten