黑马程序员技术交流社区
标题: 关于接口方面的问题,, 这两种方法有什么不一样??求解 [打印本页]
作者: 1769244078 时间: 2015-10-2 17:29
标题: 关于接口方面的问题,, 这两种方法有什么不一样??求解
interface Shape
{
double area(double givenValue);
}
class Square implements Shape
{
public double area(double sideLength)
{
return sideLength*sideLength;
}
}
class Circle implements Shape
{
public double area(double r)
{
return Math.PI*r*r;
}
}
public class Test02
{
public static void main(String[] args)
{
//第一种 写法
Shape square = new Square();
Shape circle = new Circle();
System.out.println(square.area(2));
System.out.println(circle.area(3));
/*第二种写法
Square s = new Square();
Circle c = new Circle();
System.out.println(s.area(2));
System.out.println(c.area(3));
*/
}
}
用红色字标注的两种方法都可以输出相同的答案,为什么??
这两种方法有什么不同?
菜鸟勿喷....
作者: 风语 时间: 2015-10-2 18:24
第一种方法是多态的形式 ,
多态中的成员访问问题:
a: 成员变量 编译看左边 ,运行看左边
b: 构造方法 在初始化子类的时候,都需要调用父类无参的构造方法,对父类的数据进行初始化
c: 成员方法
<1>: 静态成员方法 编译看左边 , 运行看左边
<2>: 非静态成员方法 编译看左边 , 运行看右边
作者: 1769244078 时间: 2015-10-2 19:26
偶 原来是这样 谢谢啦
作者: 白岛我种树 时间: 2015-10-2 22:06
学到东西了
作者: pan1564335 时间: 2015-10-2 22:31
第一种是父类引用指向子类对象
第二种是子类自己创建对象
但对于普通方法来说,以上两种都是指向子类对象,所以没差
作者: 1769244078 时间: 2015-10-3 11:18
恩 第一种使用的的是 面向对象中的多态 多态中成员方法是编译看左边,运行看右边. 所以说运行结果和普通的创建对象是一样的
作者: 1769244078 时间: 2015-10-3 11:27
我也学到东西了
作者: 不爱念经的小僧 时间: 2015-10-3 15:24
这就是多态,父类引用指向子类对象。成员函数在多态调用时,运行时看右边,编译看左边。
作者: 1769244078 时间: 2015-10-4 08:53
是啊 我还没有预习到多态呢 0.0
作者: zenghua 时间: 2015-10-4 10:09
bucuode00000000000
作者: 1769244078 时间: 2015-10-4 11:44
确实很不错
作者: 尼玛个鸡 时间: 2015-10-4 12:34
学习了~!
作者: 1769244078 时间: 2015-10-5 13:23
是啊 我也学习到了
作者: 拂袖叙五代 时间: 2015-10-5 14:38
父类引用指向子类对象,多态的一种表现形式。
作者: 1769244078 时间: 2015-10-5 15:58
恩 编译看左边运行看右边
作者: yuzhouyichen 时间: 2015-10-5 16:05
这就是Java中的多态,可以用父类的引用指向子类的对象,当调用父类的方法时,用的是子类重写后的方法。
作者: 1769244078 时间: 2015-10-5 16:30
恩 是的 大神大神
作者: 周建星 时间: 2015-10-5 19:31
学习
作者: 1769244078 时间: 2015-10-6 22:00
哈哈 共同学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |