今天来学习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());
}
}