java基础多态问题1111111111111?

public class Test {
public static void main(String[] args) {
Zi zi = new Zi();
zi.service();
}
}
class Fu{
String name = "张三";
public void service(){
System.out.println(this.name);
System.out.println(this.getClass().getSimpleName());
doGet();
doPost();
}
public void doGet(){
System.out.println("fu-->get");
}
public void doPost(){
System.out.println("fu-->post");
}
}
class Zi extends Fu{
String name = "李四";
public void doGet(){
System.out.println("zi-->get");
}
public void doPost(){
System.out.println("zi-->post");
}
}
结果:张三
Zi
zi-->get
zi-->post
有没有能解释一下 想半天没想明白 不要谈什么就近原则 内存分析下?
为什么输出张三 不是李四啊?

6个回答

Fu,没有service方法,肯定要向上转型的,这个时候,对象已经自动默认是fu对象,所以应该是fu对象的属性

子类声明的成员变量名与父类的成员变量名相同时,子类会隐藏这个继承来的成员变量。

当子类调用父类的方法时,才会使用这个被隐藏的成员变量。

由于service方法是从父类继承的,因此调用时使用的是被隐藏的成员变量。

子类没有service方法,因此会被upcast,也就是说只能访问父类定义的成员变量了。
而且,变量的多态没必要重新定义,建议将代码改为如下内容:

 public class Test {
    public static void main(String[] args)
    {
        Zi zi = new Zi();
        zi.service();
    }
}
class Fu {
    public String name = "张三";
    public void service()
    {
        System.out.println(this.name);
        System.out.println(this.getClass().getSimpleName());
        doGet();
        doPost();
    }
    public void doGet()
    {
        System.out.println("fu-->get");
    }
    public void doPost()
    {
        System.out.println("fu-->post");
    }
}

class Zi extends Fu {
    public Zi()
    {
        this.name = "李四";
    }

    public void doGet()
    {
        System.out.println("zi-->get");
    }
    public void doPost()
    {
        System.out.println("zi-->post");
    }
}

属性没有多态性,父子类 同名属性算2个

子类没有service的方法,所以调用的是父类的service方法,那么this代表的是当前对象的引用,此时引用的父类,也就是说this是父类,那么自然this.name是父类的属性

分析什么内存啊大哥,你Zi zi = new Zi();zi.service();都这样子了,直接最基础的知识好吧,new 的是子类的实例,所以先找service方法,因为没有service方法
所以会找父类中的service方法.
然后第二步为什么是张三,因为域对象是没有继承覆盖的,所以会找自己类中的name属性啊!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java基础之多态
java基础 直接上代码: class A { public A fun1(){ System.out.println("A--fun1"); return this; } public A fun2(){ System.out.println("A--fun2"); return this; } } class B extends A{ public A fun1(
java基础之----多态
多态 对象的多态性: class 动物 {} class 猫 extends 动物 {} class 狗 extends 动物猫 x = new 猫(); 动物 x = new 猫(); //一个对象,两种形态。 猫这类事物即具备猫的形态,又具备着动物的形态。这就是对象的多态性。 简单说,就是一个对象对应着不同的类型。 多态在代码中的体现: 父类或者接口的引用指向其子类的对象。
黑马程序员——java基础——多态
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!------- 1、多态将接口与实现分离。多态不仅能够改善代码组织结构和可读性同时还可以创建可扩展程序。 2、多态的作用是消除类型之间的耦合关系。 3、多态方法允许调用同一父类继承而来的子类方法。 4、多态也称作:后期绑定、动态绑定、运行时邦定。 5、java中所有非静态方法都是通过后期绑定实现多态。
java基础(二十四)多态
本文参考自: 原文地址 在java中一个对象有多种形态存在,叫做多态 例如:    class animal{} class cat extend animal{} 表现形式 animal x=mew Cat(); x  这类事物既具备猫额形态,又具备动物形态。 这就是对象的多态 简单的说:就是一个对象对应着不同类型 多态在代码中的体现: 父类或者接口的引用指向子类对象 ...
java基础(多态)
多态:同一个对象(事物),在不同时刻体现出来的不同状态。 举例: 猫是猫,猫是动物。 水(液体,固体,气态)。 多态的前提: A:要有继承关系。 B:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。 动物 d = new 猫(); d.show(); 动物 d = new 狗(); d.show(); C:要有父类引用指向子类对象。 父 f = new 子(); 多态中的成员访...
java基础(九)多态
A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系。 b:要有方法重写。 c:要有父类引用指向子类对象。 多态中的成员访问特点 成员变量 编译看左边(父类),运行看左边(父类)。 成员方法 编译看左边(父类),运行看右边(子类)。 静态方法 编译看左边(父类),运行看左边(父类)。 (静态和类相关,算不上重写,所以,访问还是左边的)...
JAVA基础之多态
一、定义 ​ 允许不同类的对象对同一个消息做出不同的响应 比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下: 酒 a = 剑南春 酒 b = 五粮液 酒 c = 酒鬼酒 … 这里所表现的的就是多...
java基础--多态
多态:就是指一个引用在不同情况下的多种状态。 也可以这样理解:多态是通过父类的指针,来调用不同子类中实现的方法。 具体栗子: 1、父类: Animal public class Animal { public void cry(){ System.out.println("叫"); } } 2、两个子类:Dog 和Cat Dog: public cla
java基础_多态
NULL 博文链接:https://zsl131.iteye.com/blog/626615
java基础多态
多态,顾名思义,就是多种形态,简单来说,我们定义一个父类,然后定义一个子类,子类会继承父类的方法,并且可以重写不同的方法,父类对子类可以直接引用(也就是可以直接new然后引用),下面我们就代码来进行说明: 首先定义一个Boss,叫ZeroBoss,会使用各种兵器,收了两个徒弟,并分别赠送他们一件兵器 package zzq; public class ZeroBoss { public v
java基础第八天 多态
#1、多态 多态:就同一个对象在不同时刻的表现状态不一样,例如父类的引用指向自己或子类的对象 多态前提条件: 1、要有继承,要有重写 普通类: class Fu{} class Zi extends Fu{} //多态 Fu fu = new Zi(); 抽象类: abstract class Fu(); class Zi extends Fu
java基础(三)——多态
1.什么是多态 java多态指的是用基类的引用指向子类的对象。也就是编译时和运行时指向的对象不一样,编译时指向父类,运行时指向子类。 package test; class Fathers{ //定义一个父类的run方法,因为是public的,会被子类的同名run方法覆盖 public void run() { System.out.println("父类的run方法"); }
JAVA基础:多态
多态 定义:一种事物的多种形态 以笔类为例: 铅笔、钢笔、毛笔。。。。。。 多态的规则: 1、类与类之间要建立关系,建立继承的关系; 2、必须要有方法的重写; 3、父类的指针(引用)指向子类的对象;需求:创建 动物类、猫类、狗类 都有一个吃的方法 动物类 动物吃饭 猫 猫吃鱼 狗 狗吃骨头public
java基础案例:多态
/*内部类: 将一个类定义在另一个类的里面,对里面那个类称为内部类(内置类,嵌套类)。内部类访问特点: 1、内部类可以直接访问外部类中的成员,包括私有成员 2、而外部类要访问内部类的成员就必须建立内部类的对象内部类一般用于设计:分析事物时:发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。这时就把还有的事物定义成内部类来描述*/public class InnerClassDemo{...
Java基础之多态ppt
Java基础之多态课程PPT适用于基础学习者使用,很好的课程资源
Java基础——继承,多态
在覆盖一个方法时,子类方法不能低于超类方法的可见性。特别是超类方法是public,子类方法一定要声明为public。 final final类:该类不能被继承。且类的所有方法自动变为final方法(不包括变量)。 final方法:该方法不能被覆盖(重写)。 final变量:该方法初始化之后不允许改变值了。 向上转型和向下转型 记住一点: 无论是向上还是向下转型,对象的类型在内存中是不会...
java基础------多态
                                                                                  java多态 多态:多态是同一个行为具有多个不同表现形式或形态的能力 即: 1.多态就是同一个接口,使用不同的实例而执行不同的操作          2.多态性是对象多种表现形式的体现。   多态存在必要条件:     继承...
Java基础篇-多态
1.什么是多态? 多个子类继承于某同一父类,该父类引用能指向任一子类对象,并能调用被子类重写的方法。
Java基础复习---多态
多态:父类型的引用可以指向子类对象 当使用多态的方式调用方法时,首先检查父类中是否有该方法,如果没有则编译失败;如果有,再调用子类的该方法 引用类型的强制类型转换 向上类型转换upcast,比如将cat类型转为animal类型,即将子类型转换成父类型 向下类型转换downcast  子类有些方法是父类没有的,所以调用子类方法时候需要向下类型转换
【Java基础】-【面向对象】-多态
在面向对象程序设计语言中,多态是三种基本特性之一(其他两种分别是 抽象、继承)。 多态又称动态绑定、后期绑定、运行时绑定。 我们先来看一个多态的例子: public class Test { public static void main(String[] args) { play(new Cat()); play(new Dog()); } public static void play(...
java基础_多态103
//102_面向对象多态中成员的特点 class Fu { void method1() { System.out.println("父类方法1"); } void method2() { System.out.println("父类方法2"); } } class Zi extends Fu { void m
java基础:多态
1.java引用变量 之前谈过,在方法中并未真正“拥有”一个变量,而是在栈区中进行对堆区变量的引用,在java中,引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,而运行时由实际赋给变量的对象决定。如果编译时类型和运行时不一致,就会出现多态(Polymorphism) Bird bird=new Bird(); /** Bird bird...
JAVA重要基础之多态
JAVA三(四)大特性之多态 学完继承之后我们开始了多态的学习,作为JAVA基础特性之一这是很重要的基础,多态是继封装、继承之后,面向对象的第三大特性。在我看来Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类...
Java基础之多态
多态是面向对象三大特性之一 什么是多态性? 对象在运行过程中的多种形态。 多态性我们大概可以分为两类: (1)方法的重载与重写 (2)对象的多态性 例如: //用父类的引用指向子类对象(用大的类型去接受小的类型,向上转型、自动转换) Chicken home = new HomeChicken(); 结论: 在编程时针对抽象类型的编写代码,称为面向抽象编程(或面向接口编程) 父类通常都定义为抽象类...
Java基础学习——多态
Java基础学习——多态 多态是面向对象中的一个重要概念,主要分为以下两种类型: 向上转型: 子类对象——>父类对象 向下转型: 父类对象——>子类对象 转型格式如下: 对象向上转型:父类 父类对象 = 子类实例; 对象向下转型:子类 子类对象 = (子类)父类对象; 先创建一个父类A class A{ // 定义类A public void fun1(){ // 定义...
JAVA基础------多态
多态,是继封装和继承之后的 java 的第三大特性。   一、多态的概念 多态,按字面意思就是多种形态。比如一个学生,他既是学生又是人,这就是他的两种形态。 在 java 语言中,一个 Student 类继承了 Person 类,这样,Student 类的实例对象就可以给 Student (本类)引用赋值,也可以给 Person (父类)引用赋值。 总之,多态就是可以用父类的引用指向子类...
6 Java基础 多态
/* 多态:可以理解为事物存在的多种体现形态   人:男人 女人 动物:猫 狗   猫 x=new 猫();   动物 x=new 猫();   对象函数都有多态的体现   1多态的基本体现 父类的引用指向了自己的子类对象 父类的引用也可以接受自己的子类对象 2多态的前提 必须是类与类之间有关系要么继承 要么实现 通常还有一个前提 就是存在覆盖 3多态的好处 多
Java基础学习之多态
Java中的多态1.JAVA的多态用一句话能直观的解释一下:  事物在运行过程中存在不同的状态。2.多态存在的三个前提1.类与类之间要有继承关系2.子类要重写父类的方法3.(核心)父类引用(指针)指向子类对象(子类的空间) 2.多态的优点1. 消除类型之间的耦合关系2. 可替换性3. 可扩充性4. 接口性5. 灵活性6. 简化性当使用多态方式调用方法时,首先检查父类中是否有该方法,如果...
【java基础】之多态详解
前言 java学习已经学习很长时间了,以前java基础的面向对象的三大特征部分没有重点看,今天补回来,这里主要写多态。 多态的概念 面向对象的三大特征 封装、继承、多态 多态性的前提 extends或implement,是多态性的前提。 概念 一个对象即有某种形态,又有另一种形态,这就是对象的多态性。 注意:多态指的是是对象而不是类。 4.图解 多态的格式和使用 代码中体...
Java 基础>12 - 多态
学习总结: 链接:Java基础、springboot、springcloud、docker学习目录: 多态: 1、一个对象具备多种状态。 Animal a = new Dog(); Animal a = new Cat(); Animal a = new Dinosaur(); 2、父类的引用类型变量指向了子类的对象,或者是接口的引用类型变量指向了接口的实现类对象。 3、多态即向上转型的过程:父...
Java基础---多态、内部类
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-多态(Polymorphism)多态的其他叫法:动态绑定,后期绑定,运行时绑定。多态的前提:1、类与类之间必须有关系,要么继承,要么实现。2、存在覆盖。父类中有方法被子类重写。例子:/*** * 多态的实例 * @author LQX *涉及:向上转型,多态 */ public class Test1 {
java基础-多态
1、向上转型一个类既可以作为自己本身的类型使用,也可以作为它的基类使用。 将某个对象的引用视为对其基类的引用的做法,就是向上转型。 2、方法绑定将方法调用与方法主体关联起来叫做绑定。分为前期绑定和动态绑定。 除了static方法和final方法,其他所有方法都是后期绑定(动态绑定)。 3、构造器和多态构造器的顺序: 1)调用基类构造器 2)按声明顺序调用成员初始化 3)调用导
java 基础 之 多态
多态只适用于方法,而不适用于域。   例子来至于 thinking in java: 父对象: Java代码   public class Super { public int field = 0; public int getField(){ return field; } }  子对象: Java代码 ...
黑马程序员——Java 基础:多态
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-一、概述 封装、继承和多态是 Java 语言的三大特征,封装是将将功能包含在类中,继承是获得已有的类中的成员和功能,而多态则是由于继承所带来的子类和父类的关系所带来的。多态在抽象类的继承和接口的实现中有较多的体现。二、示例和说明 可以将子类对象的指向父类的引用,并通过父类的引用调用子类中重写的方法。 // 定义一
Java基础——多态
一、多态        多态分为操作符的多态和类的多态。操作符的多态:+可以对两个整型数字进行加法运算,也可以对用户自定义的类进行加法运算,前提是需要重载+;类的多态:父类引用指向子类对象。二、实例    1、操作符的多态        +在不同的情况下有不同的作用,如果+两侧都是整型,那么表示整数相加,如果两边都是字符串表示连接字符串;    二、类的多态        dog和cat都是同一个...
Java基础复习--多态
我的独立博客 Marsguest’s Blog Java基础复习–多态 何为多态 简言之就是父类定义,子类实现。实现多态的技术成为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。看完定义可能并不能很好的理解多态到底是什么,通过下面的实例我们将更加深入的理解。 多态的实例 采用多态定义时所有信息都是属于父类信息! ...
java基础-多态-接口
接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这个方法写出来。 例子: 1、一个USB接口 public interface Usb { public void start(); public void end(); } 2、camera和phone都来实现这个USB接口 Camera类: public class
java基础5 --多态
多态polymorphism的3个必要条件: 继承, 重写, 父类引用指向子类对象。
Java 基础-接口和多态
接口 接口和类的异同 相同点: 编译后,每个接口跟类都对应一个独立的 .class 字节码文件 字节码文件必须包含在与包名匹配的目录结构中 不同点: 接口没有构造方法,不可实例化 接口中的所有方法都必须是抽象方法 接口不能包含成员变量,除了 static 和 final 变量 接口不是被类继承,而是被类实现 接口支持多继承 接口中的所有方法会被隐式的指定为 public abstract(...
【Java基础09_1】多态
多态概述事物在不同时刻表现的出的不同状态例:一个人在人类社会中生存总会扮演着多种角色,于父母而言,他是儿子或者女儿,在学校他是学生,毕业后是职场中的一员,结婚后是丈夫或者妻子,生子后是父母……等等。 前提条件要有 继承 关系 要有 方法重写 (其实没有也可以,但是没有方法重写就没有意义了,因为多态主要是靠方法重写来表现类的不同状态的) 父类的引用指向子类对象 例: Father father =
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制