前言
今天看了青空の霞光大佬b站的教学视频,有感而发记录一下java入门的学习。
一、相关知识点扫盲
1.面向对象思想
https://zhuanlan.zhihu.com/p/28427324#
https://www.zhihu.com/question/27468564
这两篇文章讲得都非常好,特别是第二篇,十分生动形象。
2.一些琐碎知识点
抽象类与抽象方法: 有抽象方法的类,一定是抽象类;抽象类不一定有抽象方法。
何为抽象?其实是因为当我们不确定一个父类下许许多多子类能否用到该方法时,就把父类定义为抽象类,把具体的功能放到具体的子类实现。往往用到抽象类的地方就是用到继承的地方,当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类。
二、实战部分
1.题目
- 设计一个Person抽象类,包含吃饭运动学习三种行为,分为工人、学生、老师三种职业。
- 设计一个接口考试,只有老师和学生会考试。
- 设计一个方法,模拟让人类进入考场,要求只有会考试的人才能进入,并且考试。
2.实操
代码如下:
1、新建Person抽象类,并实现三个抽象方法:eat、sleep、sport。再新建三个类继承Person类:Worker Student Teacher。
package Person;
public abstract class Person {
public abstract void eat();
public abstract void sleep();
public abstract void sport();
}
2定义接口Exam,并让Student和Teacher类实现它
package Person;
public class Teacher extends Person implements Exam {
@Override
public void eat() {
}
@Override
public void sleep() {
}
@Override
public void sport() {
}
@Override
public void exam() {
System.out.println("I am examing");
}
}
package Person;
public class Worker extends Person{
@Override
public void eat() {
}
@Override
public void sleep() {
}
@Override
public void sport() {
}
}
package Person;
public class Student extends Person implements Exam {
@Override
public void eat() {
}
@Override
public void sleep() {
}
@Override
public void sport() {
}
@Override
public void exam() {
System.out.println("I am examing");
}
}
Exam接口
package Person;
public interface Exam {
void exam();
}
为了,实现“只有老师和学生才能进入考场的功能”在主类里编写test方法
private static void test(Person person){
if(person instanceof Exam){
Exam e = (Exam)person;
e.exam();
}
}
}
因为Person有三种人,而Worker是不能进入考场的,使用instanceof关键字能够判断这个person能不能进入考场,(a instanceof b可以判断该对象a是不是继承/实现b这个父类/接口)
最后测试,
import Person.*;
public class Main {
public static void main(String[] args) {
Worker worker = new Worker();
Student student = new Student();
test(student);
}
当test传入worker时,没有输出;当test传入student时,输出I am examing
总结
内容不确定的方法,用abstract(子类中用法不一样)