回顾
2.封装问题引例
3.类的封装实例
4.封装问题的总结
5.实现封装应该注意的问题
三、继承的实现
1.继承的基本概念
2.继承问题的引出
3.实现继承
4.继承的限制
学习小结
四、深度认识类的继承
1.子类对象的实例化过程
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月31日 下午10:03:57
* @Description TODO 子类对象的实例化
*/
public class P297_12_10 {
public static void main(String[] args) {
Student2 s = new Student2();
}
}
class Person13 {
String name;
int age;
public Person13() { // 父类的构造方法
System.out.println("******父类构造:1.public Person()");
}
}
class Student2 extends Person13 {
String school;
public Student2() { // 子类的构造方法
// super(); // 隐含了这样一句语句,他负责调用父类构造
// ,若显式用它则必须出现在构造方法第一句
System.out.println("######子类构造:2.public Student()");
}
}
运行结果:
2.super关键字的使用
字面意思为“超级的”,因此称父类为超类(super-class)。
主要功能:完成子类调用父类中的内容,即调用父类中的属性或方法。
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月31日 下午10:24:11
* @Description TODO super调用父类中的构造方法
*/
public class P299_12_11 {
public static void main(String[] args) {
Student3 s = new Student3("Jack",30,"HAUT");
System.out.println("Name:" + s.name + ",Age:" + s.age
+ ",School:" + s.school);
}
}
class Person14{
String name;
int age;
public Person14(String name,int age){ // 父类构造方法
this.name = name;
this.age = age;
}
}
class Student3 extends Person14{
String school;
public Student3(String name,int age,String school){ // 子类的构造方法
super(name,age); // 用super调用父类中的构造方法
this.school = school;
}
}
运行结果:
调用父类中属性和方法的格式:
super.父类中的属性;
super.父类中的方法();
调用super()必须写在子类构造方法的第一行。
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月31日 下午10:24:11
* @Description TODO super调用父类中的构造方法
*/
public class P299_12_12 {
public static void main(String[] args) {
Student4 s = new Student4("Jack", 30, "HAUT");
System.out.println("I am from :" + s.school);
}
}
class Person15 {
String name;
int age;
public Person15() { // 父类构造方法
}
public String talk() {
return "I am :" + this.name + ", I am :" + this.age + "years old";
}
}
class Student4 extends Person15 {
String school;
public Student4(String name, int age, String school) { // 子类的构造方法
// 在这里用super调用父类中的属性
super.name = name;
super.age = age;
// 调用父类中的talk()方法
System.out.println(super.talk());
// 调用本类中的school属性
this.school = school;
}
}
运行结果:
3.限制子类的访问
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月31日 下午11:00:10
* @Description TODO 限制子类的访问
*/
public class P302_12_12 {
public static void main(String[] args) {
new Student5().setVar();
}
}
class Person16 {
// 在这里将属性封装
private String name;
private int age;
}
class Student5 extends Person16 {
// 在这里访问父类中被封装的属性
public void setVar() {
name = "张三";
age = 25;
}
}
运行结果:
private限制子类的访问父类的属性。
package com.Javastudy2;
/**
* @author Y.W.
* @date 2017年8月31日 下午11:14:00
* @Description TODO 子类访问父类的私有成员
*/
public class P303_12_14 {
public static void main(String[] args) {
Student6 s = new Student6("Jack", 30);
s.print();
s.setVar("Tom", 25);
s.print();
// s.Test();
}
}
class Person17 {
// 在这里使用private将属性封装
private String name;
private int age;
Person17(String name, int age) {
this.name = name;
this.age = age;
}
// 在这里设置属性值
void setVar(String name, int age) {
this.name = name;
this.age = age;
}
void print() {
System.out.println("I am :" + name + ", I am :" + age + "years old");
}
}
class Student6 extends Person17 {
Student6(String name, int age) {
super(name, age);
}
/*
* void Test(){ // 在这里尝试访问父类中被封装的属性
* System.out.println("I am :"+name+", I am :"+age+"years old"); }
*/
}
运行结果:
父类自己的方法可以不受限制地访问自己的属性和方法。
思考
休息了一段时间,稍微调整了一下,算是上次脑子的缓存溢出的修整吧。生命不止,学习不息。
记于2017年8月31日夜