zoukankan      html  css  js  c++  java
  • 继承类

     1 public class TestInstanceof
     2 {
     3     public static void main(String[] args) 
     4     {
     5         //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类
     6         //但hello变量的实际类型是String
     7         Object hello = "Hello";
     8         //String是Object类的子类,所以返回true。
     9         System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
    10         //返回true。
    11         System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
    12         //返回false。
    13         System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
    14         //String实现了Comparable接口,所以返回true。
    15         System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
    16         String a = "Hello";
    17         //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
    18         //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
    19     }
    20 }

    运行结果:

    字符串是否是Object类的实例:true
    字符串是否是String类的实例:true
    字符串是否是Math类的实例:false
    字符串是否是Comparable接口的实例:true

    与字符串实例有有关的类是Object类,它是String类的父类;String类,字符串的类型;Comparable类,String类实现了Comparable类,所有字符串是Comparable的示例。

     1 class Mammal{} //父类
     2 class Dog extends Mammal {} //子类
     3 class Cat extends Mammal{} //子类  java继承为单继承
     4 
     5 public class TestCast
     6 {
     7     public static void main(String args[])
     8     {
     9         Mammal m;
    10         Dog d=new Dog();
    11         Cat c=new Cat();
    12         m=d;
    13         //d=m;   //报错无法运行
    14         d=(Dog)m;
    15         //d=c; //报错无法运行
    16         c=(Cat)m;
    17 
    18     }
    19 }

    以上代码说明:

    类的示例可以将父类的实例化赋值给子类,反之则不能,说明只能由大到小,不能由小到大的赋值。

     1 class Parent{
     2     public int myValue=100;
     3     public void printValue() {
     4         System.out.println("Parent.printValue(),myValue="+myValue);
     5     }
     6 }
     7 class Child extends Parent{
     8     public int myValue=200;
     9     public void printValue() {
    10         System.out.println("Child.printValue(),myValue="+myValue);
    11     }
    12 }
    13 
    14 public class ParentChildTest {
    15     public static void main(String[] args) {
    16         Parent parent=new Parent();
    17         parent.printValue();
    18         Child child=new Child();
    19         child.printValue();
    20         
    21         parent=child;
    22         parent.printValue();
    23         
    24         parent.myValue++;
    25         parent.printValue();
    26         
    27         ((Child)parent).myValue++;
    28         parent.printValue();
    29         
    30     }
    31 }

    运行结果:

    Parent.printValue(),myValue=100
    Child.printValue(),myValue=200
    Child.printValue(),myValue=200
    Child.printValue(),myValue=200
    Child.printValue(),myValue=201

    说明:

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

    这个特性实际上就是面向对象“多态”特性的具体表现

  • 相关阅读:
    第十三章 类继承
    第十一章 使用类
    第十章 对象和类
    第九章 内存模型和名称空间
    第八章 函数幽探
    史上最详细得虚拟机安装过程,傻瓜式操作
    JVM内存结构图表展示
    主流消息队列rocketMq,rabbitMq比对使用
    springboot+druid+mybatis plus的多数据源配置
    linux服务器开放防火墙和端口,以及查询状态
  • 原文地址:https://www.cnblogs.com/cxy0210/p/11728964.html
Copyright © 2011-2022 走看看