继承与派生

#继承与派生
##Java中的继承与派生
继承:一个子类,拥有父类所有的属性和方法,并且可以在这个基础上添加独有的属性和新的方法。
关键字:extends
要点:Java中的继承是单继承,一个子类只能有一个父类。在Java中可以多继承的是接口,关键字是implements。
程序举例:
下面展示一些 内联代码片

public class student()//父类,学生类
{     public static void main(String[] args) {
		unstudent xw=new unstudent();
		xw.setName("小毋");
		xw.study();
		xw.setMajor("化学");
		xw.show();
	}
public int num;
public String name;
public void setName(String n){
	name = n;}
	public String getName(){
	return name;}
	public void study(){
	System.out.println(name+"正在学习!");
	}
}

public class unstudent extends student()//派生类,大学生类
{
    public String major;
     public void setMajor(String n){
     major=n;}
     public String getMajor(){
     return major;}
     public void show(){
     System.out.println("学习的是"+major); }
}

运行完以后结果如下:
小毋正在学习!
学习的是化学
可以发现子类unstudent的对象可以调用父类中的方法,也可以调用自己新定义的方法。
继承可以在有很多类具有相同属性时简化代码。比如学生管理系统有小学生初中生高中生等,具有学生的共同属性,那么这些类可以由一个学生类继承而来。
需要注意的是在集成时父类的函数如果为private类型,那么子类不能调用这个方法。可以写成protected类型。
虽然继承只能单继承,但是也可以和接口连用,要注意的是必须把继承写在前面。
比如:继承和接口是可以联用的

package wkx210127;

import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

public class unstudent extends student implements MenuListener{
	 public String major;
     public void setMajor(String n){
     major=n;}
     public String getMajor(){
     return major;}
     public void show(){
     System.out.println("学习的是"+major); }
     public void menuSelected(MenuEvent e){};
     public void menuDeselected(MenuEvent e){};
     public void menuCanceled(MenuEvent e){};
}

##方法的重写
这个和C++中的函数重载很类似,就是在新的类中将父类曾经有的方法重新写,重写的方法会覆盖在子类继承父类的方法上。
需要注意的是在方法重写时方法的参数个数,参数类型以及方法类型都不能改变,但是可以越来越开放。
例子:

package wkx210127;
public class unstudent extends student {
	 public String major;
     public void setMajor(String n){
     major=n;}
     public String getMajor(){
     return major;}
     public void show(){
     System.out.println("学习的是"+major); }
     public void study(){
    		System.out.println(name+"正在玩!");
}
}

重新运行这个方法(函数)会发现结果为:
小毋正在玩
说明这个对象xw调用的是重写的方法。
##类型的转换
###向上转换

public static void main(String[] args) {
		student xw=new unstudent();
		xw.setName("小毋");
		xw.study();
	}

将主函数改成以上内容,可以将子类的类型变为父类,当然,也要注意,如果在子类中重写了父类的方法,那么调用时会调用子类的方法。
因为在Java中如果一个方法有一个父类的属性,那么也可以是子类的属性。
例子:

//定义一个新的teacher类
public class teacher {
	public void teach(student s){
		s.study();}
}

同时修改一下主函数

public static void main(String[] args) {
		unstudent xw=new unstudent();
		xw.setName("小毋");
		teacher xx=new teacher();
		xx.teach(xw);
	}

发现运行结果为:
小毋正在学习
###强制类型转换(向下转换)

unstudent unst = (unstudent)xw;

定义出一个新的unstudent类的对象,将student类的xw强制转化为了unstudent类。
大概就是这样了。
(新人,非科班,如有错误,欢迎指正)

上一篇:html


下一篇:python转换图片透明背景为白色