黑马程序员技术交流社区

标题: 重载和重写的详细区别。。求举例说明 [打印本页]

作者: 还记得梦想吗    时间: 2014-1-16 16:20
标题: 重载和重写的详细区别。。求举例说明
张孝祥老师  2010高新技术 第九集  里面面试题中 重载与重写的区别overload与override  如果父类有一个方法是私有的,而子类中和父类有一个一模一样的方法这算不算重写呢?求详细解释
作者: 黄晓鑫    时间: 2014-1-16 16:29
不是的 私有的是父类特有的方法 子类拿不到的 子类有一个一模一样的方法 那不是重写 只是子类的特有方法而已
作者: 还记得梦想吗    时间: 2014-1-16 16:35
黄晓鑫 发表于 2014-1-16 16:29
不是的 私有的是父类特有的方法 子类拿不到的 子类有一个一模一样的方法 那不是重写 只是子类的特有方法而 ...

这个明白了,求重载和重写其它特别例子
作者: 黄晓鑫    时间: 2014-1-16 16:36
骚等奉上
作者: 黄晓鑫    时间: 2014-1-16 16:44
public class Test {

        public static void main(String[] args) {
                Fu fu = new Fu(30);
                fu.run();
                Zi zi = new Zi(20);
                zi.run();
        }

}
class Fu{
        private int 小三;
        public Fu(){}
        public Fu(int age){
                this.小三=age;
        }
        public void run(){
                System.out.println(小三);
        }
}
class Zi extends Fu{
        private int age;
        private Zi(){}
        public Zi(int age){
                this.age=age;
        }
        public void run(){
                System.out.println(age);
        }
}
作者: 汪伟楠    时间: 2014-1-16 16:56
算重写。子类重写父类其权限必须大于或等于父类方法。

overload:重载 看两个参数的个数,参数类型,与返回类型无关。
override:重写 如果父类方法是私有的,子类方法重写类方法。


作者: 汪伟楠    时间: 2014-1-16 17:04
回答错了耶???
作者: 工善器    时间: 2014-1-16 17:11
怎么叫一个一模一样的方法。访问修饰符,参数列表,函数名,函数体都一样么?
作者: 工善器    时间: 2014-1-16 17:15
我把我的关于多态的总结给你看看,看看你就明白了。如果有什么不懂的可以说
多态的两种表现形式

1.重载简介(overload)
重载要求发生在同一类中。  
我们知道,标识一个函数除了函数名外,还有函数的参数(个数和类型,顺序)。也就是说存在这样的情况:(一个类中)可以有两个或更多的函数,叫同一个名字而他们的参数列表不同。这种情况就是重载
示例:
public void a(int a){}
public int a(){}
public void a(int a,String s){}
我的总结:方法重载,方法名相同,但是参数列表不一致!(和方法覆写不一样,方法覆写的方法名和参数列表都必须一样),注意方法重载和方法覆写不同!

2.覆盖(override)
   必须有继承的情况下才有覆盖发生,覆盖的执行者是子类。

  当一个类(我们叫他子类)继承了另一个类(我们叫他父类)之后,他就具有了父类的全部方法。如果只是单纯的继承,那我们其实是在复制一个一个的父类,这是没有意义的。所以子类继承父类后,必须重写父类的方法(功能)。方法在父类中可能只是一个雏形,一个框架,真正在功能实现中大显身手的是子类重写后的方法,当我们调用这样的方法的时候,就是在执行子类的过程,父类的方法就被覆盖了。
    注意:覆盖的时候函数名和参数要和父类中完全一样,不然你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫无关系。
   
   提醒:这个在子类父类访问的时候介绍过了,不会看前边。
方法覆写产生原因:
当父类中某个方法不适合于子类时,子类出现父类一模一样的方法.
判断必杀技:子类方法前加上@Override能编译通过,表明是方法的覆写。
作者: 小小瓶盖❤    时间: 2014-1-16 18:08
public class Test11 {
        public static void main(String args[]){
                Fu f=new Zi();
                f.show_1();
        //        f.show_2();  私有方法,无法被对象调用
               
                Zi z=new Zi();
                z.show_1();
                z.show_2();
        }
}
class Fu{
        public void show_1(){
                System.out.println("show_1--->Fu");
        }
        //私有方法
        private void show_2(){
                System.out.println("Fu");
        }
}
class Zi extends Fu{
        @Override
        //覆盖父类中的show_1()方法
        public void show_1() {
                System.out.println("show_1--->Zi");
        }
        //不会覆盖父类中的show_2()
        public void show_2(){
                System.out.println("show_2--->Zi");
        }
}
结果:
show_1--->Zi
show_1--->Zi
show_2--->Zi
分析:子类中的方法要想覆盖父类中的方法,必须要同名,并且返回值类型一样,同时子类方法的权限要大于父类中的方法的权限。
注意:如果父类中的方法权限修饰符为private,那么此方法只能在此类中调用,无法被外部使用,这样对于子类来说,我们可以把
此方法看做不存在,所以根本就不存在覆盖这一说了。


作者: 还记得梦想吗    时间: 2014-1-16 20:07
工善器 发表于 2014-1-16 17:11
怎么叫一个一模一样的方法。访问修饰符,参数列表,函数名,函数体都一样么? ...

父类的一个方法是私有的,子类里的而方法也是私有两个就一样了




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