初始面向对象终

前面我们介绍了面向对象一些 封装 ,继承。今天我们继续介绍面向对象最后一个大块,多态。什么是多态,多态是一种事物的多种形态 | 多种表现形式。多态的前提是:类的继承 | 接口实现;所以多态就是父类类型的引用指向子类的对象:

public class Test{
	public static void main(String[] args){
		Person p = new Student();//父类对象的引用指向子类的对象;
		p.test();//输出结果是 "这是子类的方法"
	}
}
class Person{
	String name;
	int age;
	public void test(){
		System.out.println("这是父类的方法");
	}
}
class Student extends Person{
	public void test(){
		System.out.println("这是子类的方法");
	}
}

上面代码最终输出的结果是"这是子类的方法";所以在多态中如果子父类中重写方法,多态调用的是子类中重写的方法。注意的是父类引用对子类的新增内容不可见;当调用的时候只看引用的类型是否存在,存在就能够使用,不存在就报错。
多态调用的是成员:
1.成员变量:
编译运行看父类 : 既代码在编译的时候如果父类中没有的成员变量就报错,同样运行的时候不管子类中有无该同名变量都是运行的是父类。
2.成员方法:
编译看父类,运行看子类
抽象类 被abstract修饰的类
抽象方法被abstract修饰的方法.
可以没有方法体
必须在抽象类中

public abstract class Test02{//抽象类
	public abstract void test03(); //抽象方法
} 

注意:
1.抽象乐力不能被实例化 | 不能创建对象
2.抽象类使用
具体子类:重写所有的抽象方法 + 按需新增
抽象子类: 抽象子类需要通过具体的子类使用
3.一个抽象方法,一旦被重写过就不需要在重写了
4.抽象类中可以存在普通方法,可以存在抽象方法
5.abstract,不能和private final static native 一起使用
接口 interface
接口特殊的抽象类
interface 接口的有点:
1.接口是功能体的集合
2.是一个引用数据类.多实现
3.解耦。
4.规定开发规范。
JDK在1.7及以前只有
属性:公共的静态的变量
public static final 可以选择省略(默认是)
方法:public abstract 返回值类型 方法名();修饰符也可以省略(默认)
注意:接口的实现与类的继承非常想,但是不一样,子类继承父类就可以直接使用父类的内容,实现类去实现接口的也有用接口中的能力,但是需要实现类自己去实现。implements关键字
2.类只能单继承,接口多实现,一个类需要继承父类后实现接口(也就是一个类同时继承和实现接口的时候 继承要写在接口前面)
3.接口不能实例化
4.接口的使用智能hi通过实现类:
具体的实现类:重写所有抽象方法 + 按需新增

抽象的实现类: 按需重写抽象方法 + 按需新增
5.接口和类之间只能是类去实现接口
6.接口和接口之可以继承 ,类和接口之间只能实现.接口之间可以继承,类和接口之间多实现
7.接口可以实现多态,父接口指向子类对象


public interface interface01 extends interface02,interface03{//接口的多继承
	int age = 99;
	void play();
}
interface interface02 {
	int age = 99;
	void study();
}
interface interface03 {
	int age = 99;
	void rest();

上面代码是接口 ,下面是接口实现

public class Demo01 implements interface01{//实现接口

	@Override
	public void study() {//对抽象发现的实现
		System.out.println("学习使我快乐,活到"+age+"学到"+age);
		
	}

	@Override
	public void rest() {
		System.out.println("休息一下,马上回来!");
		
	}

	@Override
	public void play() {
		System.out.println("在玩游戏!!");
		
	}
	
}
abstract class Demo02 implements interface01{//实现接口

	@Override
	public void study() {
		System.out.println("学习让我强大");
		
	}
	
}
class Demo03 extends Demo02{//继承

	@Override
	public void play() {
		System.out.println("玩下游戏");
	}

	@Override
	public void rest() {
		System.out.println("休息下");
	}
	
}

代码测试

public class Test {
	public static void main(String[] args) {
		Demo01 demo01 = new Demo01();
		demo01.study();
		demo01.play();
		demo01.rest();
		System.out.println(interface01.age);
		System.out.println("================我是分割线===================");
		Demo02 demo02 = new Demo03();
		demo02.play();
		demo02.rest();
		demo02.study();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值