public class Employee {
String name;
int age;
public void work(){
System.out.println("工作");
}
private void eat(){
System.out.println("员工要吃饭");
}
}
子类1
java复制代码
public class Teacher extends Employee{
}
子类2
java复制代码
public class Manager extends Employee{
}
测试类
java复制代码
public class Demo106Inherit {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name = "小王";
teacher.age = 18;
System.out.println(teacher.name+" "+teacher.age);
teacher.work();
//teacher.eat(); 子类继承父类后不能使用私有成员
Manager manager = new Manager();
manager.name = "小明";
manager.age = 25;
System.out.println(manager.age+" "+ manager.name);
manager.work();
}
}
三、继承中成员变量和成员方法的访问特点
1.成员变量
① 子类和父类中的成员变量不重名
父类:
java复制代码
public class Fu {
int numFu = 100;
}
子类:
java复制代码
public class Son extends Fu{
int numSon = 10;
}
测试类:
java复制代码
public class Demo107Test {
public static void main(String[] args) {
//创建父类对象
Fu fu = new Fu();
System.out.println(fu.numFu);//父类中的numFu
// System.out.println(fu.numZi);//不能直接调用子类中的特有成员
Son son = new Son();
System.out.println(son.numFu);
System.out.println(son.numSon);
}
}
public class Fu {
int numFu = 100;
int num = 10000;
}
子类:
java复制代码
public class Son extends Fu{
int numSon = 10;
int num = 100;
}
测试类:
java复制代码
public class Demo107Test {
public static void main(String[] args) {
//创建父类对象
Fu fu = new Fu();
System.out.println("父类中fu.numFu:"+fu.numFu);//父类中的numFu
// System.out.println(fu.numZi);//不能直接调用子类中的特有成员
//创建子类对象
Son son = new Son();
System.out.println("子类中son.numFu:"+son.numFu);
System.out.println("子类中son.numSom:"+son.numSon);
System.out.println("fu.num:"+fu.num);//继承了父类,可以使用父类中非私有成员
System.out.println("son.num:"+son.num);//子类的
}
}
总结:
继承前提下,成员变量访问特点口诀(同样适用于多态):
看等号左边是谁,先调用谁中的成员,子类中没有再寻找父类
2.成员方法
① 子类和父类中的成员方法不重名
父类:
java复制代码
public class Fu {
public void methodFu(){
System.out.println("我是父类中的methodFu");
}
}
子类:
java复制代码
public class Son extends Fu{
public void methodSon(){
System.out.println("我是子类当中的methodSon");
}
}
测试类:
java复制代码
public class Demo108Test {
public static void main(String[] args) {
Fu fu = new Fu();
fu.methodFu();
// fu.methodSon();不能直接调用子类特有的方法
System.out.println("------------------------------------------------------------");
Son son = new Son();
son.methodSon();
son.methodFu();// 继承父类之后,能调用父类非私有成员
}
}
② 子类和父类中的成员方法重名
父类:
java复制代码
public class Fu {
public void methodFu(){
System.out.println("我是父类中的methodFu");
}
public void method(){
System.out.println("我是父类中的method方法");
}
}
子类:
java复制代码
public class Son extends Fu{
public void methodSon(){
System.out.println("我是子类当中的methodSon");
}
public void method(){
System.out.println("我是子类中的method方法");
}
}
测试类:
java复制代码
public class Demo108Test {
public static void main(String[] args) {
Fu fu = new Fu();
fu.methodFu();
// fu.methodSon();不能直接调用子类特有的方法
fu.method();
System.out.println("------------------------------------------------------------");
Son son = new Son();
son.methodSon();
son.methodFu();// 继承父类之后,能调用父类非私有成员
son.method();
}
}
多态调用:
java复制代码
public class Demo108Test {
public static void main(String[] args) {
Fu fu = new Fu();
fu.methodFu();
// fu.methodSon();不能直接调用子类特有的方法
fu.method();
System.out.println("------------------------------------------------------------");
Son son = new Son();
son.methodSon();
son.methodFu();// 继承父类之后,能调用父类非私有成员
son.method();
System.out.println("------------------------------------------------------------");
Fu fu1 = new Son();
fu1.method();// 调用的是子类中的method方法
}
}
public class Fu {
public void methodFu(){
System.out.println("我是父类中的methodFu方法");
}
public void method(){
System.out.println("我是父类中的method方法");
}
}
子类:
java复制代码
public class Son extends Fu{
public void methodSon(){
System.out.println("我是子类中的methodSon方法");
}
@Override
public void method(){
System.out.println("我是子类中的method方法");
}
}
测试类:
java复制代码
public class Demo109Test {
public static void main(String[] args) {
Fu fu = new Fu();
fu.methodFu();// 自己的methodFu方法
fu.method();//new的是父类对象,那么调用的就是父类中的method方法
System.out.println("------------------------------------------------------------");
Son son = new Son();
son.methodSon();
son.methodFu();
son.method();// 子类中的method方法
}
}