今天来学习JAVA的面向对象的继承与多态
何为继承?
和我们生活中的继承是一个意思,子女可以继承父母的车、房、财产,姓氏等······
在java中,继承使用的关键字是extends。
子类可以继承父类的属性、方法。
在Java中,继承只能单继承,所以一个子类只能继承一个父类。但是一个父类允许有多个子类。
为何要使用继承?
实现了代码的重用,相同的代码不需要重复的编写。
子类继承父类,可以直接享受父类中已经封装好的属性以及方法,不需要再次开发。
子类可以根据自己的属性,封装自己特有的属性和方法。
如何使用?(格式)
public class Fu{
//属性
//方法
}
//extends 表示继承
public class Zi extends Fu{
//属性
//方法
}
通过案例具体学习
1.创建父类,拥有属性姓名和年龄。拥有show()方法显示自己的信息。
2.创建子类,继承父类的属性和方法,拥有新的属性爱好。
3.创建测试类,进行测试。
继承例题
声明一个Person类,私有化属性name和age,并将字段封装起来;
在Person类中定义一个talk()方法,打印姓名和年龄信息;
在main方法中声明并实例化一Person对象p,给p中的属性赋值,调用talk()方法打印 我是:张三,今年:18岁。
测试说明
测试输入:
我是:张三,今年:18岁
/********* begin /
// 声明并实例化一Person对象p
Person p =new Person();
// 给p中的属性赋值
p.setName(“张三”);
p.setAge(18);
// 调用Person类中的talk()方法
p.talk();
/ end *********/
}
}
// 在这里定义Person类
class Person {
/********* begin *********/
private String name;
private int age;
public void talk(){
System.out.println(“我是:”+name+",今年:"+age+“岁”);
} public String getName() { return name; } public void setName(String name){ this.name=name; } public int getAge() { return age; } public void setAge(int age){ this.age=age; } /********* end ******
多态中的成员访问特点
成员访问特点
成员变量
编译看父类,运行看父类
成员方法
编译看父类,运行看子类
代码演示
class Fu {
int num = 10;
public void method(){ System.out.println("Fu.. method"); }
}
class Zi extends Fu {
int num = 20;
public void method(){ System.out.println("Zi.. method"); }
}
public class Test2Polymorpic {
/*
多态的成员访问特点:
成员变量: 编译看左边 (父类), 运行看左边 (父类) 成员方法: 编译看左边 (父类), 运行看右边 (子类) */ public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num); f.method(); }
}
多态例题
(多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果。
如果传入的是Apple 输出 “流出苹果汁”
传入的是Orange 输出 “流出橙汁”
传入的是Banana 输出 “流出香蕉酱”
abstract class Fruit{
abstract void makeJuice();
}
class JuiceMachine{
public static void makeJuice(Fruit f){
f.makeJuice();
}
}
class Apple extends Fruit {
@Override public void makeJuice() { // TODO Auto-generated method stub System.out.println("流出苹果汁"); }
}
class Orangle extends Fruit{
@Override public void makeJuice() { // TODO Auto-generated method stub System.out.println("流出橙汁"); }
}
class Banana extends Fruit{
@Override public void makeJuice() { // TODO Auto-generated method stub System.out.println("流出香蕉酱"); }
}
public class Test1 {
public static void main(String[] args) { JuiceMachine.makeJuice(new Apple()); JuiceMachine.makeJuice(new Orangle()); JuiceMachine.makeJuice(new Banana()); }
}