请教一下JAVA多态性的问题

A a=new B();

这个a和A B分别有什么关系呢?到底是B的对象还是A的对象呢? 如果是B的对象,
a和A又有什么关系呢? 为什么不直接写成 B a= new B()呢?

本人初学者,想请教一下各位,谢谢了!![![图片说明](https://img-ask.csdn.net/upload/201612/1          3/1481596537_959620.jpg)图片说明](https://img-ask.csdn.net/upload/201612/       13/1481596531_714310.jpg)图片说明

这个问题比较难,你没什么基础,所以说术语你听不懂。我就说简单点:

A a = new B(); 这个里面涉及到3个东西,就是你问的A a B。

首先A B,这个东西叫做类,比如说,A类,B类,人类,你看,这个A B 其实和 人一样的。既然一样,我就拿人来说。

人,分为男人类,女人类。那这个男人类其实就是人类的一个更细致的划分,我说人包含了男人类,这话没毛病。

如果你说男人类 包含人类,这话就有毛病了。但是我说到现在都是抽象的,就是都是概念性的东西,
但是你(假设你叫张三并且是个汉子)。你属于 男人类,你是一个具体的东西,是由抽象的东西(男人类)而来的。

A a = new B();
等价于

人 张三 = new 男人();

翻译过来就是,你张三是男人,属于人,你问 A 和 a什么关系,就等价于 人 和张三是什么关系,
就是张三是一个实体,实实在在存在的,而人只是描述张三这个实体属于那种类型的一个说明,就是表示,张三是一个人。

B a= new B() 这个就等价于 男人 张三 = new 男人();

完全可以的,没毛病,但是为什么都建议写成 人 张三 = new 男人();而不建议写成 男人 张三 = new 男人()呢

比如说你有一个类C,这个类里面有个方法,
addPerson(人 某某某) 或者 addPerson(男人 某某某)

如果你定义成前面方式,你可以添加男人,也可以添加女人,如果你定义成后面那种,那你只能添加男人。

抽象的东西往往具有不定性,具有灵活性。具体的东西就定死了。

你可以找找继承方面的资料看看

涉及到面向接口编程的概念

A a = new B();
创建了一个A的引用a,然后用new B()创建了一个B的对象,用等号连接,表示将B的对象赋给A的引用a
B是A的子类

可以多看看那些基础知识,很有帮助的。

           A             a            =           new B();
   引用类型      引用       指向        B类型对象

一旦执行语句 new B() 就是创建了一个B类型的对象,
之后不管是向上造型,向下造型 , 都是在改变引用的类型,
但引用所指向的就是这个B类型的对象,这是不改变的

概括的来说:子类对象指向父类引用,这是多态的一种表现形式,在 A a = new B();中 A应该是B的父类,此表达式是向上转型 将子类B转型成父类的对象。
的引用,这样写的好处是父类可以调用子类所继承的方法或者属性,称之为动态链接。如果成 B b = new B();父类就不能调用子类继承过去的方法或者
属性了,则对象的多态性不能体现出来。
个人拙见,不喜可喷。

这属于接口编程的范畴,基础还要学