A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张孝祥老师  2010高新技术 第九集  里面面试题中 重载与重写的区别overload与override  如果父类有一个方法是私有的,而子类中和父类有一个一模一样的方法这算不算重写呢?求详细解释

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

10 个回复

倒序浏览
不是的 私有的是父类特有的方法 子类拿不到的 子类有一个一模一样的方法 那不是重写 只是子类的特有方法而已
回复 使用道具 举报
黄晓鑫 发表于 2014-1-16 16:29
不是的 私有的是父类特有的方法 子类拿不到的 子类有一个一模一样的方法 那不是重写 只是子类的特有方法而 ...

这个明白了,求重载和重写其它特别例子
回复 使用道具 举报
骚等奉上
回复 使用道具 举报
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);
        }
}
回复 使用道具 举报
算重写。子类重写父类其权限必须大于或等于父类方法。

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

回复 使用道具 举报
回答错了耶???
回复 使用道具 举报
怎么叫一个一模一样的方法。访问修饰符,参数列表,函数名,函数体都一样么?
回复 使用道具 举报
我把我的关于多态的总结给你看看,看看你就明白了。如果有什么不懂的可以说
多态的两种表现形式

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

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

  当一个类(我们叫他子类)继承了另一个类(我们叫他父类)之后,他就具有了父类的全部方法。如果只是单纯的继承,那我们其实是在复制一个一个的父类,这是没有意义的。所以子类继承父类后,必须重写父类的方法(功能)。方法在父类中可能只是一个雏形,一个框架,真正在功能实现中大显身手的是子类重写后的方法,当我们调用这样的方法的时候,就是在执行子类的过程,父类的方法就被覆盖了。
    注意:覆盖的时候函数名和参数要和父类中完全一样,不然你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫无关系。
   
   提醒:这个在子类父类访问的时候介绍过了,不会看前边。
方法覆写产生原因:
当父类中某个方法不适合于子类时,子类出现父类一模一样的方法.
判断必杀技:子类方法前加上@Override能编译通过,表明是方法的覆写。
回复 使用道具 举报 1 0
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 17:11
怎么叫一个一模一样的方法。访问修饰符,参数列表,函数名,函数体都一样么? ...

父类的一个方法是私有的,子类里的而方法也是私有两个就一样了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马