object对象和instanceof的使用
import java.util.Objects;
public class ObjectTest {
private String name;
private int age;
public ObjectTest(){
// super();
}
public ObjectTest(String name,int age){
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "ObjectTest{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ObjectTest that = (ObjectTest) o;
return age == that.age &&
Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public static void main(String[] args) {
//需求:想打印出对象的内容
ObjectTest ot =new ObjectTest("张飞",18);
ObjectTest ot2 =new ObjectTest("张飞",18);
System.out.println(ot);
// System.out.println(ot == ot2);
// System.out.println(ot.equals(ot2));
//输出包名+类名
System.out.println(ot.getClass().getName());
/* ObjectTest ot1 = new ObjectTest("张飞",18);
System.out.println(ot1); //打印出的还是首地址*/
// //打印出的是首地址
// System.out.println(ot);
// System.out.print(ot);
// //封装性,不要单独去操作这些私有的属性
// System.out.println(ot.name);
// System.out.println(ot.age);
/*
//有点复杂
ot.setName("张飞");
ot.setAge(18);
System.out.println(ot.getName());
System.out.println(ot.getAge());
*/
//instanceof的用法 : 判断一个对象是否是某个类的实例
if(ot instanceof ObjectTest){
System.out.println("yes");
}else{
System.out.println("no");
}//主要判断类类型的
}
}
抽象类的使用
//定义一个人类
public abstract class AbstractTest {
private String name;
private int age;
//基本工资
private double basicSalary;
public AbstractTest(){
}
public AbstractTest(String name,int age){
this.name = name;
this.age = age;
}
public AbstractTest(String name,int age,double basicSalary){
this.name = name;
this.age = age;
this.basicSalary = basicSalary;
}
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 double getBasicSalary() {
return basicSalary;
}
public void setBasicSalary(double basicSalary) {
this.basicSalary = basicSalary;
}
//定义一个计算工资的方法
public abstract double getSalary();
}
子类 Worker.java
//工人
public class Worker extends AbstractTest {
//绩效工资
private double kpiSalary;
public Worker(){
}
public Worker(String name,int age,double kpiSalary){
super(name,age);
this.kpiSalary = kpiSalary;
}
public double getKpiSalary() {
return kpiSalary;
}
public void setKpiSalary(double kpiSalary) {
this.kpiSalary = kpiSalary;
}
@Override
public double getSalary() {
//基本工资+绩效工资
return super.getBasicSalary() + this.getKpiSalary();
}
public static void main(String[] args) {
//向上转型:子类向父类转化,会自动转化
AbstractTest at = new Worker();
//向下转型:父类向子类转化,需要强制转化而且可能会出现问题
// AbstractTest at2 = new AbstractTest();//错误的
}
}
向上转型和向下转型
public class A {
public void print(){
System.out.println("我是A...");
}
}
public class B extends A {
public void print(){
System.out.println("我是B...");
}
public static void main(String[] args) {
A a = new A();
//向下转型
B b = (B)a;
b.print();//编译通过,但是运行会报异常
}