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的重写
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java员工打卡签到代码的实现方式有很多种,以下是其中一种可能的实现方式: ```java import java.util.Date; public class Employee { private String name; private Date lastSignIn; public Employee(String name) { this.name = name; } public void signIn() { Date now = new Date(); System.out.println(name + "签到成功,时间:" + now); lastSignIn = now; } public void signOut() { Date now = new Date(); System.out.println(name + "签退成功,时间:" + now); } public void checkInStatus() { if (lastSignIn == null) { System.out.println(name + "尚未签到"); } else { System.out.println(name + "上次签到时间:" + lastSignIn); } } } ``` 上面的代码定义了一个`Employee`类,其中包含了员工的姓名和上次签到时间。类中有三个方法:`signIn()`、`signOut()`和`checkInStatus()`。`signIn()`方法表示员工签到,会打印出员工姓名和当前时间,并将当前时间记录为上次签到时间;`signOut()`方法表示员工签退,会打印出员工姓名和当前时间;`checkInStatus()`方法表示查询员工的签到状态,会打印出员工姓名和上次签到时间(如果已经签到过),否则会提示尚未签到。 如果要使用这段代码,可以在其他类中创建`Employee`对象,并调用其中的方法来完成打卡签到功能。例如: ```java public class Main { public static void main(String[] args) { Employee emp1 = new Employee("张三"); emp1.signIn(); emp1.checkInStatus(); emp1.signOut(); } } ``` 这段代码创建了一个名为`emp1`的`Employee`对象,姓名为“张三”。接着调用了`signIn()`方法进行签到,`checkInStatus()`方法查询签到状态,最后调用了`signOut()`方法进行签退。运行这段代码后,会打印出以下结果: ``` 张三签到成功,时间:Thu Jul 22 14:47:23 CST 2021 张三上次签到时间:Thu Jul 22 14:47:23 CST 2021 张三签退成功,时间:Thu Jul 22 14:47:28 CST 2021 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值