大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: Java语法 修改

继承

复习:面向对象:继承 / protected / 父类装子类 / 类型转换 / 滥用

extends和super

使用关键字extends表示继承(同C#的冒号:),super表示基类(同C#中的base)

public class OnlineStudent extends Student {
	public OnlineStudent(int age) {
		super(age);
	}
	
	void goLesson() {
		//以下super,没有冲突的时候可以不写
		System.out.println(super.score);
		super.Walk();
	}
}

protected和package

因为:Java类成员默认是package的(C#默认是private的)

所以,protected表示子类和包内都可以访问:(类似于C#的internal protected)

  • 子类可以跨包(package)的访问父类的protected成员
  • 外部不能跨包(package)的访问protected成员

final

修饰类/方法,表明不能继承/override,(同C#中的sealed)

instanceof

判断某个对象是不是某个类的实例(同C#中的is,没有as)

Person fg = new Teacher();
System.out.println(fg instanceof Person);
System.out.println(fg instanceof Teacher);

只能作用于对象,能作用于基本类型

Integer i = new Integer("23");    //OK
//		int i = new Integer("23");	//会报错
System.out.println(i instanceof Integer);


多态

复习:J&C:面向对象:构造函数 / 禁止继承 / 抽象类 / 接口 / API

调用接口默认方法

通常情况下,你可以在子类中直接的调用接口的默认方法。

但是,一个子类继承多个接口,且多个接口中定义了相同默认方法的时候:

//IMove和IPlay中都有Walk()的default方法
class Student implements IMove, IPlay {  

首先,子类必须override接口中的default方法:

然后,如果要调用接口中的默认方法,要采用一种有些奇怪的写法:

class Student implements IMove {
	public void Run(int miles) {
		IMove.super.Walk();
	}
}

为什么要这样做呢两个同名的default方法,

  • 如果实现类不override的话,外部调用Student对象的Walk()方法时,不知道调用哪一个;
  • 同样的,实现类调用接口的default Walk()方法,你也得指定具体调用的是哪一个

PS:C#中用显式实现解决这些问题。


匿名类

前面我们说:接口和抽象类不能实例化。比如这样是会报错的:

//error:Cannot instantiate the type IMove		
IMove person = new IMove();

但是,如果你在eclipse里按alt+/使用智能提示,就会生成这样的代码:

IMove person = new IMove() {
	@Override
	public void run() {
	}
};

这就是匿名类

实际上我们不是去new的IMove,而是IMove的一个子类,只是这个子类没有名称,所以叫做匿名类。

匿名类要求在花括号({})中完全实现其接口或抽象类,供以后调用该匿名类对象成员使用。

演示:

  • 在run()中添加:
    void run() {
    	System.out.println("奔跑吧兄弟!");
    }
  • person调用run()
    person.run(); 

PS:虽然都叫做匿名类,但C#的匿名类和Java的匿名类完全两码事,^_^


作业

  1. 声明一个实现IChat的匿名类,调用其Send()方法

其他见:J&C:面向对象:构造函数(参数重载) / 内部类 / 继承(构造函数调用 & 禁止) / 现代接口

Java 面向对象 继承 多态
觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 Java语法 中继续学习:

我们的 特色

  • 先学习,后付费
  • 线上/线下,自由组合

更多了解

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧