黑马程序员技术交流社区

标题: 关于接口方面的问题,, 这两种方法有什么不一样??求解 [打印本页]

作者: 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-2 22:06
学到东西了

我也学到东西了
作者: 不爱念经的小僧    时间: 2015-10-3 15:24
这就是多态,父类引用指向子类对象。成员函数在多态调用时,运行时看右边,编译看左边。
作者: 1769244078    时间: 2015-10-4 08:53
不爱念经的小僧 发表于 2015-10-3 15:24
这就是多态,父类引用指向子类对象。成员函数在多态调用时,运行时看右边,编译看左边。 ...

是啊 我还没有预习到多态呢 0.0
作者: zenghua    时间: 2015-10-4 10:09
bucuode00000000000
作者: 1769244078    时间: 2015-10-4 11:44
zenghua 发表于 2015-10-4 10:09
bucuode00000000000

确实很不错
作者: 尼玛个鸡    时间: 2015-10-4 12:34
学习了~!
作者: 1769244078    时间: 2015-10-5 13:23
尼玛个鸡 发表于 2015-10-4 12:34
学习了~!

是啊 我也学习到了
作者: 拂袖叙五代    时间: 2015-10-5 14:38
父类引用指向子类对象,多态的一种表现形式。
作者: 1769244078    时间: 2015-10-5 15:58
拂袖叙五代 发表于 2015-10-5 14:38
父类引用指向子类对象,多态的一种表现形式。

恩 编译看左边运行看右边
作者: yuzhouyichen    时间: 2015-10-5 16:05
这就是Java中的多态,可以用父类的引用指向子类的对象,当调用父类的方法时,用的是子类重写后的方法。
作者: 1769244078    时间: 2015-10-5 16:30
yuzhouyichen 发表于 2015-10-5 16:05
这就是Java中的多态,可以用父类的引用指向子类的对象,当调用父类的方法时,用的是子类重写后的方法。 ...

恩 是的 大神大神
作者: 周建星    时间: 2015-10-5 19:31
学习        
作者: 1769244078    时间: 2015-10-6 22:00
周建星 发表于 2015-10-5 19:31
学习

哈哈 共同学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2