package com.lesson7.example;
/*
* 了解子类继承与父类的关系及用法,以现实生活中父亲和儿子的财产继承关系为例
* */
/*
* 继承是面向对象编程的三大特征之一。
* 由继承而得到的类称为子类(或派生类),被继承的类称为父类(或超类)。
* Java中每个类只允许有一个父类。
* 语法如下:class <子类> extends <父类>
* */
class Father{
protected int money = 100000; //父亲拥有100000private String wife = "Mary"; //父亲的私有属性,不能被子类访问String friend = "Tom";//儿子从父母获得钱的方法protected int getMoney(){
System.out.println("======================================");System.out.println("儿子从父亲这里拿100");money = money - 100; //父母控制儿子的花销,规定每次只能拿100return 100;
}
}
class Son extends Father{
//子类中可以不进行任何操作,直接访问父类的成员变量和方法,直接继承,只是要注意访问权限的问题
}
public class ExtendsExample {
public static void main(String args[]){
Son son = new Son();System.out.println("儿子可以直接继承父亲的财产:" + son.money);son.getMoney();/** 继承是一种基于已有的类创建新类的机制。* 子类可以直接使用父类public和protected的成员变量和方法。* */
//System.out.println("父亲的妻子儿子是不能继承的" + son.wife);//error
/*** 子类继承也受访问权限控制:* 同一个包内仅private不能访问,不同包内仅public和protected能够访问* */
}
}
package com.lesson7.example;
/*
* 了解子类继承与父类的关系及用法,以现实生活中父亲和儿子的财产继承关系为例
* */
class Son2 extends Father{
int money = 2000; //儿子自己也有自己的钱,父亲的钱暂时还不是儿子的/** 【隐藏】子类隐藏了父类同名的成员变量:* 当子类的成员变量和父类中的成员变量同名时,* 父类的成员变量不能被子类继承(即被子类的成员变量覆盖),* 此时称子类的成员变量隐藏了父类的成员变量。* */
//儿子不满足于每次只能从父亲那里获取100,他想要改变一下拿钱的方式:拿1000public int getMoney(){
int sum = 0;for(int i = 0; i < 10; i++){
sum = super.getMoney() + sum; //super只能在子类中(内部)使用
}return sum;
}
/** 【重写】子类不满足父类所定义的方法* 概念:若子类的方法名与父类相同,参数个数和参数类型也完全相同时,叫做方法重写。* 注意:1.子类不得修改父类的返回类型* 2.子类不得降低父类的访问级别
* */public int getFatherMoney(){ //儿子通过修改的方式从父亲处获得的money
return getMoney();
}
public void local(){
int money = -99;System.out.println(money); //输出:-99//变量的取值根据就近原则,局部变量>成员变量System.out.println(this.money); //输出:2000//局部变量:如果方法内的变量与成员变量同名,使用this来访问成员变量System.out.println(super.money); //输出:99000//成员变量:如果成员变量与父类的成员变量同名,使用super来访问父类的成员变量
}
/** 【this】* 1.this关键字表示当前类的[内部实例对象],可以访问所有级别的成员变量和方法* 2.this只能在当前类中使用,不能在类方法(static修饰的方法)中使用(因为this表示当前类的实例对象)* 3.this在实例方法中一般都被省略,除非在实例方法中存在与成员变量同名的局部变量,使用this访问成员变量* 4.当一个类中包含多个构造函数时,如果其中一个构造函数要调用另外的构造函数也可以使用this* *//** 【super】* 1.super可以访问被子类重写的父类同名方法和被子类隐藏的父类的成员变量(方法和成员变量都可以), super只能在子类中(内部)使用* 3.可使用super关键字调用父类构造方法* */
}
public class ExtendsExample2 {
public static void main(String args[]){
Son2 son2 = new Son2();System.out.println("儿子实际上自己有的钱" + son2.money);System.out.println("儿子通过修改的方式从父亲处获得的钱" + son2.getFatherMoney());son2.local();
}
}