`

JAVA面试题解惑系列(九)——继承、多态、重载和重写

阅读更多
removed.

请到博文下载PDF文件:http://zangweiren.iteye.com/blog/241218
58
11
分享到:
评论
58 楼 yzzh9 2009-03-04  
不包括方法的返回值类型,访问权限修饰符
find_myway 写道

在这学到不少东西,但以下代码如果在一个类里会报错的,重载必要条件是要满足方法参数不一样啊。


Java代码

public void method(int i, String s) {      
    // do something      
}      
     
public String method(int i, String s) {      
    // do something      
}    public void method(int i, String s) {  
    // do something  
}  
 
public String method(int i, String s) {  
    // do something  


当然报错了,这两个方法是同一型构的,因为他们只是返回值不一样。博主是那这个来举同一型构的例子而已。
57 楼 find_myway 2008-12-02  
在这学到不少东西,但以下代码如果在一个类里会报错的,重载必要条件是要满足方法参数不一样啊。
public void method(int i, String s) {   
    // do something   
}   
  
public String method(int i, String s) {   
    // do something   
}  

56 楼 rabbitbug 2008-10-16  
对于在初始化方法调用方法时,在parent运行初行化方法时,调用的vist方法是parent的还是sub的? 此时子类还未初始化吧,怎么还会调用的是子类的vist方法?

class Parent2
{
	Parent2 ()
	{
		vist();
	}
	
	void vist()
	{
		System.out.println("Parent Vist");
	}
}

public class SubConstructor extends Parent2
{

	SubConstructor()
	{
		vist();
	}
	
	void vist()
	{
		System.out.println("Sub Vist");
	}

	public static void main(String[] args)
	{

		Parent2 parent = new Parent2();
		parent.vist();
		System.out.println("---------------");
		SubConstructor sub = new SubConstructor();
		sub.vist();
		System.out.println("---------------");
	}

}

55 楼 rabbitbug 2008-10-16  
对于在初始化方法调用方法时,在parent运行初行化方法时,调用的vist方法是parent的还是sub的? 此时子类还未初始化吧,怎么还会调用的是子类的vist方法?


class Parent
{
Parent ()
{
vist();
}

void vist()
{
System.out.println("Parent Vist");
}
}

public class SubConstructor extends Parent
{

SubConstructor()
{
vist();
}

void vist()
{
System.out.println("Sub Vist");
}

public static void main(String[] args)
{

Parent parent = new Parent();
parent.vist();
System.out.println("---------------");
SubConstructor sub = new SubConstructor();
sub.vist();
System.out.println("---------------");
}

}

54 楼 jackdown 2008-10-09  
子类override父类方法,返回值类型也是有要求的,跟父类相同或者父类返回值类型的子类。

引用

yujiang 2008-07-31   回复
JDK1.5+ 可以的 称为 返回值协变

http://en.wikipedia.org/wiki/Covariant_return_type
53 楼 zhx_77 2008-10-06  
期待你更多的更新
52 楼 simple is power 2008-09-07  
一点疑问:
overriding 是译为重写吗,重写和覆盖一样吗?
那 overwriting 干嘛用?
51 楼 臧圩人 2008-08-26  
yf42 写道
期望看到博主关于异常相关,反射相关,设计模式相关等方面的作品,希望博主能够加大篇幅,将问题更加深入。基础方面的知识大家应该都比较熟悉,希望能更加深入的讲解。辛苦博主了。


谢谢你的支持。异常、反射、设计模式这些以后都会写到的。我会努力写好的,也欢迎你多提宝贵意见,呵呵
50 楼 臧圩人 2008-08-26  
yf42 写道
说真的,博主讲得东西在面试方面还是有些简单了,能否在选择话题方面再深入一些


我计划写的这个系列是沿着JavaSE到JavaEE的线路,由浅入深一步步展开的,刚开始讲到的基础知识会比较多,不过基础同样很重要啊,呵呵
49 楼 yf42 2008-08-26  
期望看到博主关于异常相关,反射相关,设计模式相关等方面的作品,希望博主能够加大篇幅,将问题更加深入。基础方面的知识大家应该都比较熟悉,希望能更加深入的讲解。 辛苦博主了。
48 楼 yf42 2008-08-26  
说真的,博主讲得东西在面试方面还是有些简单了,能否在选择话题方面再深入一些
47 楼 zcry21cn 2008-08-25  
顶一个,万丈高楼平地起,基础是盖高楼的前提,用了浅显易懂的语言说明白了原理.博主真牛.
46 楼 狂放不羁 2008-08-06  
继承的目的有两个:一个是实现重用,而我觉得最重要的目的是为了实现多态。并且在实战中最好少用继承,多用组合,继承破坏封装性,如果父类的某些非private的方法发生了变化,那么势必会影响到子类。所以善用组合。我的经验是:通过继承来统一类的继承体系的接口,而通过组合在运行时候动态的增加行为。
45 楼 H_eaven 2008-08-05  
多态:学Java都应该会写的,不会写你就不要说学过Java.
问题的严重性不在于会写,而在于会用,会灵活运用,用得恰到好处.
Design Pattern有几个没用到多态,虽然它不提倡你用继承,可是没继承那来得多态.别像洪水泛滥乱用一通就是了.

PS:努力学会使用,回头也像大禹治水一样训服这个野兽.
44 楼 fxbird 2008-08-04  
这些所谓的面试题太害人了,没有一个正规的公司会问这些,倒是给人一种思路罢了。
43 楼 qiancaoduwu 2008-08-04  
感谢楼主,辛苦了!文章很好!
42 楼 xieboxin 2008-08-03  
今期的内容不多,学语言的人一般都会懂的,不过会能灵活运用的人不多……
41 楼 臧圩人 2008-08-03  
回复jishu_vip:

非常感谢你的建议,已经按照你的建议做了调整
40 楼 臧圩人 2008-08-03  
CSDN网友jishu_vip写道:

引用楼主 zangweiren 的帖子:
以上三条规律同时遵守下面这些约束:

  1. 普通类和抽象类都只能最多继承一个普通类,或者最多继承一个抽象类,并且这两种情况是互斥的,也就是说它们要么继承一个普通类,要么继承一个抽象类。
  2. 普通类、抽象类和接口在继承接口时,不受数量的约束,理论上可以继承无限多个接口。当然,对于普通类来说,它必须实现它所继承的所有接口中定义的全部方法。


建议增加两条:
3.抽象类继承抽象类(或实现接口)时可以不实现父类的abstract方法,即可以不用在子类中定义父类的abstract方法,但是它会默认过去的。
如:

Java code
public abstract class A{
   abstract void methodA();
}

interface I{
    void methodI();
}

public abstract class B extends A implements I{
}

public class C extends B{
  //must implement the inherited abstract method
  void methodA(){
  }
  public void methodI() {
   
  }
}



4.普通类继承抽象类时必须实现父类中全部的abstract方法,即必须在子类中定义父类的abstract方法(之所以需要普通类实现接口时必须实现接口中的全部方法,也是因为接口中所有的方法都是public abstract的。)


另外:重载和重写中提到的型构,有点难以理解,为什么不直接叫方法签名呢?
39 楼 臧圩人 2008-08-03  
回复HenryShanley:

没什么好说的,对你的建议再次表示感谢:)

相关推荐

Global site tag (gtag.js) - Google Analytics