« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
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); }} |
|
|