Java复习打卡day9
抽象类
格式:abstract class{
内容
}
//抽象类就是类里面有尚未确定的部分
在生活中抽象类的使用比较少,我们更多用到的是接口,所以这里就不对它举例了
接口
如果一个类中的方法都是抽象的,所有的变量都是全局常量(public static final 修饰),
那么此时就可以将这个类定义为接口
接口:
格式:
interface 接口名称{
抽象方法;
全局常量;
}
实例讲解:
//先创建一个Person1 接口
public interface Person1 {
void run();
}
//再创建一个Person 接口
public interface Person {
void say();
void eat();
}
//然后创建People接口将上面的两个接口都继承
public interface People extends Person ,Person1{}
//这里面创建一个Student类来实现People接口(间接实现了Person 和Person1 接口)
public class Student implements People {
@Override
public void say() {
System.out.println("你好!");
}
@Override
public void eat() {
System.out.println("吃饭!");
}
@Override
public void run() {
System.out.println("跑步!");
}
}
//用Main方法来是先接口里面的方法,提现接口的用处
public class Main {
public static void main(String[] args) {
Student s1 = new Student();
s1.say();
s1.run();
s1.eat();
}
}
多态
多态:对象的多种形态。
//先创建一个Person父类:
import java.util.Objects;
public class Person {
private String name;
private int 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;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//接着创建Student子类继承Person类
public class Student extends Person {
Student(String name, int age){
super(name, age);
}
}
//再创建Nurse类继承Person类
public class Nurse extends Person {
public Nurse(String name, int age) {
super(name, age);
}
public Nurse() {
}
}
//最后用Main类来创建具体的对象
public class Main {
public static void main(String[] args) {
Person p1 = new Student("张三",17);
Person p2 = new Nurse("李四",18);
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
instanceof
作用:判断某个对象是否是指定的类型。
以下举例说明:
//创建一个Person接口:
public interface Person {
void say();
}
//创建Person的第一个子类Student:
public class Student implements Person {
@Override
public void say() {
System.out.println("锄禾日当午,汗滴禾下土");
}
}
//创建Person的第二个子类Nurse:
public class Nurse implements Person {
@Override
public void say() {
System.out.println("厂前明月光,疑是地上霜。");
}
}
//写一个Main方法来实现instanceof:
public class Main {
public static void main(String[] args) {
Student p1 = new Student();
say(p1);
Nurse n1 = new Nurse();
say(n1);
}
public static void say(Person p){
if(p instanceof Student) {
//格式:实例化对象 instanceof 类
//返回Boolean类型的结果
Student p1 = (Student) p;
p1.say();
}else{
System.out.println("输入Student类型才能执行!");
}
}
}
Object 简述
Object 类是任何类的父类。
public class Main {
public static void main(String[] args) {
Object o = 123;
Object o1 = "123";
Object o2 = true;
Object o3 = 1.3;
//万物皆是Object,Object可以定义任何类型的对象
}
}
toString 和equals
在Java中这两个方法原本的用处并不大,但是,在重写之后会有更大的功效。
所以这里建议大家在创建类的时候都override一下。
重写后的作用:
toString 方法:返回对象的字符串表示
equals 方法:判断两个对象是否相同
这里给出两个方法的重写
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}//这就是系统自动生成的toString重写,我们也可以根据需要自己改写
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
name.equals(person.name);
}//这是equals的重写
}