本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9706409
建立时间:2004年12月20日




[java语言]java类继承的问题
原创空间,  文章收藏,  软件技术,  电脑与网络

邢红瑞 发表于 2005/3/21 11:40:56

java类继承的规则   class Person{private String name="";private int age=0; public Person(){   System.out.println("person无参数构造函数");} public Person(String name,int age){   this.name=name;   this.age=age;   System.out.println("person 2 参数的构造函数");  }} class Student extends Person{ private String school;private String grade; public Student(){   System.out.println("student 无参数的构造函数");} public Student(String name ,int age,String school){   System.out.println("student 3 参数的构造函数");}    public   Student(String name ,int age,String school,String grade){   super(name,age);   this.school=school;   this.grade=grade;   System.out.println("student 4 参数的构造函数,super().");}} class Test{public static void main(String [] args){   System.out.println("st1:");   Student st2=new Student();      System.out.println("---------------------------");        System.out.println("st2:");   Student st=new Student("zhangshan",76,"武大");   System.out.println("---------------------------");     System.out.println("st3:");   Student st3=new Student("lisi",24,"武大","研究生"); }} /*=======================================输出如下: E:\JavaWork>java Testst1:person无参数构造函数student 无参数的构造函数---------------------------st2:person无参数构造函数student 3 参数的构造函数---------------------------st3:person 2 参数的构造函数student 4 参数的构造函数,super(). ************************************** 说明了创建一个子类的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统将不会给它创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错,但如果在子类的构造函数中指定用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数,就不会报错。 我们假设A是B的父类,B是A的子类。 1、如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。 2、子类B实例化时会自动调用父类A的默认构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,最好给父类A提供一个无参数的构造函数。 3、或者在B的构造函数中显示的调用父类A的有参构造函数,super(parameter)对于构造函数来说,super()只能出现在子类构造函数中,并且是第一行,如果没有将其硬编码进子类构造函数,则编译器会在编译过程中自动加入。private的构造函数,只能在本包内继承子类。 package com.caucho.hessian.client; public class HessianProxy implements InvocationHandler {  private static final Logger log    = Logger.getLogger(HessianProxy.class.getName());    protected HessianProxyFactory _factory;  private WeakHashMap<Method,String> _mangleMap    = new WeakHashMap<Method,String>();  private URL _url;    /**   * Package protected constructor for factory   */  HessianProxy(HessianProxyFactory factory, URL url)  {    _factory = factory;    _url = url;  }   }这样不在package com.caucho.hessian.client;里面,是不能继承的。package com.xxx.hessian; import com.caucho.hessian.client.HessianProxyFactory;import com.caucho.hessian.client.HessianProxy; import java.net.URL; public class SohuBlogHessianProxy  extends HessianProxy {    public SohuBlogHessianProxy(URL url, HessianProxyFactory factory) {       super(url, factory);    }}


阅读全文(3727) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.738 second(s), page refreshed 144774092 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号