欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第六章 类的合成与继承

程序员文章站 2022-06-12 20:45:55
...

一   关于继承的两个机制

1    这里的继承,也有public、private、友好的几种权限级别

     如果父类与子类在同一个package包里,那么子类可以继承父类的public、友好级别的方法与属性

     如果父类与子类不在同一个package包里,那么子类可以继承父类的public方法和属性

2   子类中调用父类的方法与属性:super.funcitonname,   super.propertyname

      如果子类与父类都有方法:print(), 且参数也是相同的,父类中调用print()方法 --- 运行子类中的print(), 子类中调用print()方法 --- 运行的是子类中的print()方法

package com.alisa.net;

import com.fivelession.net.*;

/** 类的合成与继承 */
public class Shriming {
	
	Semrimg semrimg;
	Rwqing rwqing;
	
	/** 类的合成: 一个类作为另一个类的成员变量,并打印这个类 */
	void wsiflying(){
		
		semrimg = new Semrimg();
		semrimg.initvalues();
	}
	
	/** 类的继承 */
	void shirleping() {
		
		rwqing = new Rwqing();
		rwqing.reflying();
		
	}

}
package com.fivelession.net;

public class Rwqing extends Hbxing{
	
	String sendboxstr;
	int intonumber = 0;
	
	public Rwqing() {
		
		sendboxstr = "this is a new beginning!";
		print(); /** 这里的print调用的是本类的print方法 */
	}
	
	public void reflying() {
		
		super.string = sendboxstr;
		super.print();  /** 这一句的print,调用的是父类的print方法 */
	}
	
	void print() {
		
		System.out.println("this is Rwqing class print funciton!");
	}

}
package com.fivelession.net;

public class Hbxing {
	
	private float s;
	private int n;
	String string;
	
	Hbxing(){
		
		s = 6.2f;
		n = 5;
		print();	/** 如果本类作为父类有子类,那么这个print调用的是子类中的print方法 */
	}
	
	void print() {
		
		System.out.println("s= " + s);
		System.out.println("n= " + n);
		System.out.println("string= " + string);
	}
}

二   关于合成

1  合成的一点理解,两个自定义的类A,B,B的一个实例对象作为A类的一个属性,这样A的实例就可以调用B类的一些功能方法

给出一份代码的示例如下:

package com.alisa.net;

import com.fivelession.net.*;

/** 类的合成与继承 */
public class Shriming {
	
	Semrimg semrimg;
	Rwqing rwqing;
	
	/** 类的合成: 一个类作为另一个类的成员变量,并打印这个类 */
	void wsiflying(){
		
		semrimg = new Semrimg();
		semrimg.initvalues();
	}
}
package com.fivelession.net;

public class Semrimg {
	
	private String valve1, valve2, valve3, valve4;
	Upingsy upingsy;
	int i;
	float fy;
	void print() {
		
		/* 如果类的基本数据类型与对象没有进行初始化时,编译器会给每个对象句柄一个默认值null,数值类型的会置为1
		 * 句柄的初始化进行的时间、地点:
		 * 1. 在对象定义的时候,这意味着它们在构建器调用之前,肯定能得到初始化
		 * 2. 在那个类的构建器中
		 * 3. 紧靠在要求实际使用那个类之前
		 * 这样做,可以节省一部分开销
		 * */
		
		System.out.println("valve1= " + valve1);
		System.out.println("valve2= " + valve2);
		System.out.println("valve3= " + valve3);
		System.out.println("valve4= " + valve4);
		System.out.println("i= " + i);
		System.out.println("fy= " + fy);
		System.out.println("upingsy= " + upingsy.toString());
	}
	
	public void initvalues() {
		
		//valve1 = "a";
		//valve2 = "b";
		//valve3 = "c";
		//valve4 = "d";
		
		//i = 3;
		//fy = 0.5f; // 这里直接写0.5是不行的,必须跟个f
		
		upingsy = new Upingsy();
		
		print();			
	}
	
	public static void main() {
		
		Semrimg semrimg = new Semrimg();
		semrimg.valve1 = "a";
		semrimg.valve2 = "b";
	}

}
package com.fivelession.net;

public class Upingsy {
	
	private String string;
	
	Upingsy() {
		
		System.out.println("Upingsy()");
		string = new String("Upingsy");
	}

	
	public String toString() {
		
		return string;
	}
}