精华内容
下载资源
问答
  • 写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教! 文章目录引言提出疑问代码实践结论总结 引言 class A { static int g(int n){ ...

    写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!



    引言

    class A {
        static int g(int n){
            return n*n;
        }
    }
    class B extends A{
        static int g(int n){
            int m=A.g(n);
            return m+n;
        }
    }
    public class test {
        public static void main(String[] args) {
            A a=new B();
            System.out.println(a.g(3));
        }
    }
    
    

    结果:

    9
    

    提出疑问

    • 上转型对象调用与父类的静态方法,实际会调用父类还是子类的静态方法?
    • 创建上转型对象时,父类的构造会不会执行?
    • 子类编写一个同名的静态方法,是不是将父类的静态方法覆盖了,父类的静态方法就不存在了呢?

    代码实践

    class A {//父类
    
        A() {
            System.out.println("父类的构造");
            f();
        }
    
        static void f() {
            System.out.println("父类的静态方法");
        }
    
        ;
    }
    
    class B extends A {//子类
    
        B() {
            System.out.println("子类的构造");
            f();
        }
    
        static void f() {
            System.out.println("子类的静态方法");
        }
    }
    
    public class test {
        public static void main(String[] args) {
            //第一种
    //        System.out.println("A a=new A()");
    //        A a = new A();
    
            //第二种
            System.out.println("B b=new B()");
            B.f();
    
            //第三种
            A a = new B();
            a.f();
        }
    }
    
    

    结论

    使用A a = new A()
    结果:

    A a=new A()
    父类的构造
    父类的静态方法
    

    使用父类的静态方法A.f(),结果调用了父类的静态方法结果:父类的静态方法

    使用B b=new B()
    结果:

    B b=new B()
    父类的构造
    父类的静态方法
    子类的构造
    子类的静态方法
    

    使用子类的静态方法时B.f(),结果调用了子类的静态方法结果:子类的静态方法,父类的静态方法不被调用

    使用A a=new B()
    结果:

    B b=new B()
    父类的构造
    父类的静态方法
    子类的构造
    子类的静态方法
    父类的静态方法
    父类的静态方法
    

    用上转型对象调用静态方法时a.f(),实际调用了父类的静态方法结果:父类的静态方法

    总结

    • 使用父类或子类创建对象,使用该对象调用静态方法,实际调用的就是该对象的静态方法,不会发生变化
    • 使用上转型对象调用静态方法,实际会调用父类中的静态方法(子类不能重写父类的静态方法)
    • 出现上转型对象时,父类和子类的构造都会被执行

    针对疑问3,得到结论:存在上转型对象时,使用该对象调用静态方法,实际调用的是父类的方法,即便是将该对象进行强制转换为子类对象,实际调用还是父类的方法(详细请看代码中的第三种)。

    由此得出:在存在上转型对象时,子类定义的与父类同名的静态方法(不是重写)将会失效


    由于水平有限,博客难免会有不足,恳请大佬们不吝赐教!
    最后:祝你我变得更强!

    展开全文
  • JAVA中上转型对象使用方法

    千次阅读 2019-08-30 17:05:18
    从人的思维方式来看,说“狼是动物”属于上溯的思维方式,从而衍生出Java中的向上转型对象。对象的向上转型,就是多态的写法。 格式: 父类名称 对象名 = new 子类对象名称(); Animal animal = new Wolf(); 含义:...

    如果动物类(Animal)是父类,狼类(Wolf)是子类,那么可以说狼是动物,这时,狼将失去作为狼独有的属性和功能。从人的思维方式来看,说“狼是动物”属于上溯的思维方式,从而衍生出Java中的向上转型对象。对象的向上转型,就是多态的写法。
    格式:

    父类名称 对象名 = new 子类对象名称(); Animal animal = new Wolf(); 
    

    含义:

    右侧创建一个子类对象,把它当做父类来看。 
    

    注意事项:

    向上转型一定是安全的,从小范围转换成为大范围。 
    这里称动物是狼的上转型对象
    

    二者比较:

    1. 上溯转型对象不能操作子类新增的成员变量,不能调用子类新增的方法,相当于失去了一部分属性和方法。
    2. 上溯转型对象可以访问子类继承或者隐藏的成员变量,也可以调用子类继承的方法和子类重写的实例方法。
    3. 如果子类重写了父类的实例方法,上溯转型对象调用时调用的是子类重写了的实例方法。 不要将父类创建的对象和子类对象的上转型对象混淆
    4. 可以将对象的向上转型对象强制转换成一个子类对象,该子类对象又具备了子类对象的所有属性和方法
    5. 不可以将父类创建的对象引用赋值给子类声明的对象
    6. 如果子类重写了父类中的静态方法,那么子类对象的向上转型对象不能调用子类重写的静态方法,只调用父类的静态方法。

    例如

      public class e1test{
        	public static void main(String[] args) {
        		Animal wolf = new Wolf();
        		System.out.printf("%d:%d",wolf.setM(),wolf.m);
        	}
        }
        
        class Animal {
        	int m = 100;
        	public int setM() {
        		return m;
        	}
        }
        
        class Wolf extends Animal{
        	int m = 6;
        	public int setM() {
        		return m;
        	}
        }
        输出结果是:6:100
    

    这里子类继承的方法中操作的变量m一定是继承的或是被子类隐藏的m
    子类新增或重写的方法中操作的m一定是子类声明的那个m

    也就是wolf.setM()是子类重写的对象,它操作的m是子类声明的m(6),输出为6
    而wolf.m操作的变量m是子类继承的m(100),输出为100

    展开全文
  • 若是父类子类同名同参方法静态方法,那么上转型后实例化的对象引用的是父类方法。 若是父类子类同名同参方法是非静态方法,那么上转型后实例化对象引用的是子类方法。 所以静态方法不要乱用 ...
    1. 若是父类子类同名同参方法是静态方法,那么上转型后实例化的对象引用的是父类方法。
    2. 若是父类子类同名同参方法是非静态方法,那么上转型后实例化对象引用的是子类方法。

    所以静态方法不要乱用

    展开全文
  • 上转型对象

    千次阅读 2015-05-04 13:45:43
    假设A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中,例如:  A a;  a=new B(); 或  A a;...对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些

    假设A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中,例如:

              A  a;

             a=new B();

            A  a;

            B b=new B();

           a=b;

               这时,称对象a是对象b的上转型对象。对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点:

    (1)上转型对象不能操作子类新增的成员变量(失去了这部分属性),不能调用子类新增的方法(失掉了这一部分的行为)。

    (2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。上转型对象操作子类继承的方法或子类重写的实例方法,起作用等价于           子类去调用这些方法。因此,如果子类重写了父类的某个实例方法后,当对象的上转型对象调用这个实例方法时一定是调用了子类重写的实例方法。

    (3)如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。



    展开全文
  • 在这种情况下子类怎么办呢,子类隐藏(术语hidden)了父类的静态方法,因为子类没法重写,所以当p是Parent引用类型时,调用的就是Parent类里的output()方法,而不是Child类里的output()方法,因为Child类里没有重写...
  • 二类特殊的对象: 上转型对象与下转型对象...上转型对象不能使用子类新增成员(包括成员变量,成员方法),只能使用子类重写父类的方法,被子类隐藏的父类变量;子类未重写的父类方法,未被隐藏的父类成员变量.   silen...
  • 什么是对象的上转型对象,举个例子 假设Animal类是Tiger类的...(1)上转型对象不能操作子类新增的成员变量,不能调用子类的新增方法; (2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方...
  • 关键字final的使用 final关键字可以修饰 类、成员变量、方法方法中的局部变量 ; 一、当 final 修饰类时,则这个类就不能被继承,即这个类没有子类; 一般格式如下: 则类 A 是不能被其他...对象的上转型对象 ...
  • Java上转型对象

    2018-06-26 22:53:55
    JAVA中上转型对象的详细解释首先是方法的参数是父类对象,传入子类对象是否可行然后引出Parent p = new Children();这句代码不是很理解,google的过程中引出向上转型要理解向上转型又引出了动态绑定从动态绑定又...
  • 将一个父类的引用赋值给一个子类对象,这个子类对象就叫做对象的上转型对象。 假设Animal类是Tiger类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,例如: Animal a; a=new Tiger(); 或 ...
  • 对象的上转型对象

    千次阅读 2016-01-08 20:20:32
    假设Animal类是Tiger类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如:  Animal a;  a=new Tiger();  或  Animal a;... 这时,称对象a是对象b的上转型对象(好比
  • 将一个类型强制转换成另一个类型的过程被称为类型转换。本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时,...这时,称对象a是对象b的上转型对象....
  • 对象a是父类的声明对象,对象b是子类的实例化对象,将b的引用赋值给a,这时,称对象a是b的上转型对象 例: ...上转型对象不能操作子类新增的属性和方法,但是可以访问子类继承和隐藏的成员变量 ...
  • ##1,静态方法和实例方法调用 2,子类的对象赋值给父类的引用和直接使用子类对象的区别 class Fu1 { int length=10; public static void getArea1() { System.out.println("English"); } public void getArea2...
  • 上转型对象是将子类的对象赋值给父类的引用,形如: SuperClass sup = new SubClass();   属性,私有方法静态方法、final方法都是静态绑定的,即编译期确定的。 其他方法是动态绑定的,即虚拟机运行时确定...
  • Java —— java上转型对象分析

    千次阅读 多人点赞 2017-08-09 11:36:28
    父类 public class Subject{ public String b="我是父类b"; public void operation(){ System.out.println("我是父类方法"); }; } 子类 public class MySubject extends Subject { public Stri
  • Java中上转型对象的详细解释 首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent p = new Children(); 这句代码不是很理解,google的过程中引出向上转型 要理解向上转型又引出了动态绑定 ...
  • 上转型对象的特点

    千次阅读 2018-06-18 18:19:40
    假设Animal类是Tiger类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如: Animal a; a=new Tiger();... 这时,称对象a是对象b的上转型对象(好比说“老虎是动物”)。 ...
  • Java中上转型对象的详细解释

    千次阅读 2017-04-27 16:05:15
    Java中上转型对象的详细解释 首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent p = new Children(); 这句代码不是很理解,google的过程中引出向上转型 要理解向上转型又引出了动态绑定 从动态...
  • java的继承和上转型对象 一 Java的继承中调用方法的选择 首先我们看一组代码:class Animal{ private int m=100; public int setM() { return m; } } class Dog extends Animal{ int m=65; public int getM...
  • 同样的引用 ,但是实例化的具体对象不同(实例化对象对应的类相同的父类的子类) ,实例对象调用相同的方法方法的具体的执行能力是不一样的 相同方法 具体实现是不同的 向上转型 用父类对象的引用 指向一个具体的...
  • 对象的向上转型对象

    2019-03-17 17:00:31
    从人的思维方式来看,说“老虎时动物”属于上溯的思维方式,从而衍生出Java中的向上转型对象。 向上转型对象的声明 Animal a = new Tiger(); //或者 Animal a; Tiger b = new Tiger(); a = b; 这时,称对象a是...
  • 情况2: 当调用父类中定义的静态方法时,调用的也是父类的,即使子类中有同名的方法也不行。   这个的原理是什么呢?向上转型静态绑定之间的关联又是什么呢???</p>
  • 假设A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中,例如:  A a;  a=new B(); 或 ...对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,115
精华内容 15,246
关键字:

上转型对象调用静态方法