Java中的向上造型和向下造型等

package com.study.oop.day01;

/**

* 如果某个方法是静态 的,它的行为就不具有多态性

* @author LuHongGang

* @date 2017年6月5日

* @time 下午4:19:21

* @since 1.0

* 构造函数并不具有多态性,它们实际上是static方法,

* 只不过该static声明是隐式的。因此,构造函数不能够被override。

*/

public class staticDemo {

public static void main(String[] args) {

StaticSuper ss = new StaticSub();

ss.StaticMethod();                              // 这里调用的是父类中的静态方法  子类不能都重写父类中的该静态方法

ss.NotStaticMethod();

//ss.ThisMethodIsNotExistsInSuper();            // 程序编译不通过,向上造型   初始化后的对象只能调用 父类类型的方法和属性

/**

* Java 中向上造型: 父类类型的引用 指向子类的对象

* StaticSuper ss = new StaticSub();

*/

StaticSuper ss2 =  new StaticSuper();           // 向下造型

StaticSub  ss3 = (StaticSub) ss;

//ss2.ThisMethodIsNotExistsInSuper();

//StaticSub ss4 = (StaticSub) new StaticSuper();//编译通过 ,运行异常

//ss3.ThisMethodIsNotExistsInSuper(); 运行时异常

System.out.println(ss3.name);

// 所以向下造型的时候 需要使用instanceof

if(ss2 instanceof StaticSub){                   // 向下造型 的时候强制需要进行 判断  false

StaticSub ss5 = (StaticSub) ss2;

System.out.println(ss5.name);

}else{

System.out.println(" 左边对象不是右边类的实例 ");

}

if(ss instanceof StaticSub){                    // true

StaticSub ss6 = (StaticSub) ss;

System.out.println(" 左边对象是右边类的实例 ");

ss6.ThisMethodIsNotExistsInSuper();

}

}

}

class StaticSuper{

public static void StaticMethod(){

System.out.println("我是   父类   的静态方法");

}

public void NotStaticMethod(){

System.out.println("我是   父类   的非静态方法");

}

}

class StaticSub extends StaticSuper{

String name = "10010";

public static void StaticMethod(){

System.out.println("我是  子类  的静态方法");

}

public void NotStaticMethod(){

System.out.println("我是  子类  的非静态方法");

}

/**

*  该方法 在父类中并不存在,仅仅在子类中独有

*

*/

public void ThisMethodIsNotExistsInSuper(){

System.out.println("仅仅是子类独有的方法,这是 本类的一个扩展");

}

}

时间: 2024-10-12 08:05:18

Java中的向上造型和向下造型等的相关文章

java中的向上转型与向下转型

以前学Javase时就专门注意过这个问题,现在到了现在又犯了这个错误,这个错误让我排查了好久 1 : 向上转型:大体可以理解为子类转换成父类,例子优先还是: 1 public class Animal { 2 public void eat(){ 3 System.out.println("animal eatting..."); 4 } 5 } 7 public class Cat extends Animal{ 9 public void eat(){ 11 System.out.

9.4.2.2 F# 中的向上转换和向下转换(UPCASTS AND DOWNCASTS)

9.4.2.2 F# 中的向上转换和向下转换(UPCASTSAND DOWNCASTS) 如果类型之间的转换不会失败,就称为向上转换(upcast).我们已经看到,把类型转换成由该类型实现的接口,就是这种情况:另一个示例是把派生类转换成它的基类,在这种情况下,编译器也可以保证操作是正确的,不会失败. 如果有一个基本类型的值,希望将它转换为继承类,操作可能会失败,因为基类的值可能是目标类的值,也可能不是.在这种情况下,我们必须使用第二种类型转换,称为向下转换(downcast).让我们用一个示例来

多态中的向上转型和向下转型

package ren.redface.demo; /* * 多态中的向上转型和向下转型: * * 引用类型之间的转换 * 向上转型 * 由小到大(子类型转换成父类型) * 向下转型 * 由大到小 * 基本数据类型的转换 * 自动类型转换 * 由小到大 * byte short char --- int --- long --- float --- double * 强制类型转换 * 由大到小 */ public class MethoDemo { public static void main

Java转型(向上转型和向下转型)

在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.

C++中的向上类型转换和向下类型转换+四种强制类型转换

转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类,和基类向子类的强制类型转换. 向上强制类型转换 切割:覆盖方法和子类数据丢失的现象生成切割(slice) class Base { public: int b; virtual void Test() { cout << "base" <<en

C++中的向上类型转换和向下类型转换

在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类,和基类向子类的强制类型转换. 向上强制类型转换 切割:覆盖方法和子类数据丢失的现象生成切割(slice) [cpp] view plain copy class Base { public: int b; virtual void Test() { cout << "base" <<endl; } }; class Derived:public Base { public: in

Java中的时间和日期(下)

转载请注明出处:http://blog.csdn.net/wl9739/article/details/51882913 在上篇文章Java中的时间和日期(上)里面,简单介绍了Java中的Date类,Calendar类以及用于格式化的SimpleDateFormater类.使用这些的时候我们会明显地感受到其中的不便之处,比如,Calendar类的月份是从0开始计数的:日期格式输出不够友好,很多情况下都需要使用SimpleDateFormater类来格式化:一些简单得日期计算也比较麻烦等等.所以就

3.sql中的向上递归和向下递归

1.向下递归 select * from table_name where 条件 connect by prior bmbm(本级关联条件)=sjbmbm(上级关联条件) start with bmbm(本级关联条件)='610000000000'(本级编码)--包含本级 select * from table_name where 条件 connect by prior bmbm(本级关联条件)=sjbmbm(上级关联条件) start with sjbmbm(本级关联条件)='6100000

【JAVA】关于向上转型与向下转型

向上转型: 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 1 public class Animal { 2 public void eat(){ 3 System.out.println("Animal eat!"); 4 } 5 } 6 7 class Bird extends Animal{ 8 public void eat(){ 9 System.out.println("Bird eat!");