第六章 类的合成与继承
程序员文章站
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;
}
}
上一篇: 一个巨宅男子的超级爆笑日志