JAVA类的继承学习笔记

JAVA类的继承学习笔记——稻草人

学习资料:《Java就业培训教程》

 

Java类继承的特点

1.Java只支持单继承,不允许多继承,一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承,,即是类X不可以既继承类Y又继承类Z。

2.可以有多继承,如:类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。

3.子类继承父类的所有成员变量和成员方法,但不继承父类的构造方法(构造方法是特殊的成员方法,他与类名相同,不返回结果也不加void返回值)。

4.在子类的构造方法中可以使用super()调用父类的构造方法,如下:

public class Student extends Person
{
	public Student(String name,int age,String school)
	{
		super(name,age);
		this.school = school;
	}
}

 

5.如果子类没有显式地调用父类构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。也就是,在下面的例子中,写不写super()语句效果是一样的:

public class B extends A
{
	public B ()
	{
		super();//写不写,效果时一样的
	}
}

 

如果子类构造方法没有显式地调用父类构造方法,二父类中又没有无参数的构造方法(需要再次说明:如果父类没有显式地定义任何构造方法,系统将提供一个无参数的构造方法,相当于父类中又无参数的构造方法),则会编译出错。所以,通常情况下只要定义了有参数的构造方法,一般还要再定义一个无参数的构造方法。

/**
 * 测试类的继承特性
 * @author Administrator
 *
 */
class Person
{
	public String name;
	public int age;
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	public Person() {}//如果这个构造函数不写,则编译会出错
	public void getInfo()
	{
		System.out.println("name:"+name+" , age"+age);
	}
}
class Student extends Person{
	public void study()
	{
		System.out.println("好好学习,天天向上");
	}
	public static void main(String arg[])
	{
		Person p = new Person();
		p.name = "Person";
		p.age = 33;
		p.getInfo();
		
		Student s = new Student();
		s.name = "student";
		s.age = 10;
		s.getInfo();
		s.study();	
	}
}

 

子类对象实例化过程

1.分配成员变量的存储空间,并进行默认的初始化,就是用new关键字产生对象以后,对成员变量用相应的关系对对象中的成员变量进行初始化赋值。

2.绑定构造参数。

3.如果有this()调用,则调用相应的重载构造方法,(被调用的冲在构造方法又从步骤2开始执行这些流程),被调用的重载构造方法结束后回到当前的构造方法,然后直接跳到步骤6执行。

4.显式或隐式追溯调用父类的构造方法(一直到Object类为止,Object是所有Java类的最顶层父类),父类的构造方法又从步骤2开始对父类执行这些流程,父类构造方法执行结束后,回到当前的构造方法,当前构造方法继续往下执行。

5.进行实例变量的显式初始化,也就是执行在定义成员变量时就对其进行赋值的语句。String school = "NIT";

  6.执行当前构造方法的方法体里面的程序代码。

 

覆盖父类的方法

*覆盖的方法必须和被覆盖的方法具有相同的方法名称,参数列表和返回值类型。

 

*覆盖方法时,不能使用比父类中被覆盖的方法更加严格的访问权限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章