Day11

一、 Object类

1、含义

​ 所有类的基类/超类,一个类没有明确继承的类,默认继承Object

2、equals

比较两个对象内存地址是否相同

判断两个对象是否相同,Object不同的子类判断两个的对象是否相同有不同的判断规则,子类重写equals即可

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

3、getClass

获取该类的字节码文件对象

A a = new A();

//获取A类的字节码文件对象
Class<? extends A> c = a.getClass();

//获取A类中所有属性
Field[] declaredFields = c.getDeclaredFields();
for (Field field : declaredFields) {
    System.out.println(field);
}

//获取A类中所有的方法
Method[] declaredMethods = c.getDeclaredMethods();
for (Method method : declaredMethods) {
    System.out.println(method);
}

4、hashCode

获取对象的hash值
hash值-系统利用对象的内存地址+散列算法获取的一个值
注意:hash值不等于内存地址

5、toString

获取对象的字符串表示(将对象转换为字符串)

返回对象的字符串表示,Object不同的子类有不同的属性,重写toString,返回属性

public String toString(){
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Object obj1 = new Object();				
//java.lang.Object@15db9742
System.out.println(obj1.toString());

二、final 作用:

1.修饰变量 - 常量

存储在常量池中,直到项目结束才会被销毁

2.修饰类,类不能被继承

//A类不能有子类
public final class A {

}

3.修饰方法,方法不能被重写

public class A {

	//该方法不能被子类重写
	public final void method(){}
}

三、抽象类及抽象方法

1、抽象方法:

没有代码块并使用abstract修饰的方法,交给非抽象的子类去重写

public abstract class Person {
	
	private String name;
	private char sex;
	private int age;
	
	public Person() {
	}
    ......
	
	//抽象方法
	public abstract void eat();
	
	public void sleep(){
		System.out.println(this.name + "睡觉觉");
	}
}

public abstract class Chinese extends Person{

	private String id;
	
	public Chinese() {
	}
    ......
	
	//抽象方法
	public abstract void hobby();
}

public class GuangDong extends Chinese{
	
	public GuangDong() {
	}
	......

	@Override
	public void hobby() {
		System.out.println(super.getName() + "喜欢做生意");
	}

	@Override
	public void eat() {
		System.out.println(super.getName() + "吃肠粉、潮汕牛肉火锅");
	}
}

2、应用场景:

当一个方法必须在父类中出现,但是这个方法又不好实现,就把该方法变成抽象方法,

交给非抽象的子类去实现

3、深入抽象类及抽象方法

①.抽象类中只能有抽象方法?

​ 抽象类里可以有构造方法、静态方法、成员方法

②.抽象类中不可以没有抽象方法?
  		可以没有抽象方法,但是这样毫无意义
③.如果父类是抽象类,则子类必须实现父类的抽象方法?
  		子类如果是抽象类,可以不实现父类对的抽象方法
④.抽象类不能有构造方法?
  		可以有构造方法的
⑤.可以使用new关键字来创建抽象类对象?
  		不可以的,创建出的是匿名内部类的对象

//1.创建匿名类,继承Chinese,重写eat、hobby方法
//2.创建匿名类的对象
//3.赋值给父类的引用
Chinese c = new Chinese() {
@Override
public void eat() {
}
@Override
public void hobby() {
}
};
c.eat();

四、接口

1.接口是特殊的抽象类

public interface I1 {
	
}

2.接口中只能有静态常量和抽象方法

public interface I1 {

	//默认添加public static final
	int i = 100;
	
	//默认添加abstract
	public void method01();
	public void method02();
	
}

3.JDK1.8的新特性允许接口中使用默认方法和静态方法

public interface I1 {

	//默认方法
	default void defaultMethod(){
		System.out.println("接口中的默认方法");
	}
	
	//静态方法
	public static void staticMethod(){
		System.out.println("接口中的静态方法");
	}
	
}

4、管理系统的规范接口

public interface IManagerSystem {
	
	public static final int NAME = 1;
	public static final int SEX = 2;
	public static final int AGE = 3;
	public static final int CLASS_ID = 4;
	public static final int ID = 5;

	public boolean add(Student stu);
	
	public boolean delete(String classId,String id);
	
	public boolean update(String classId,String id,int type,Object value);
	
	public int query(Student stu);
	
	public int query(String classId,String id);
	
	public void expansion();
}

5、深入接口

① 类 - 接口的关系:

​ 类 - 类:单继承

​ 类 - 接口:多实现

​ 接口 - 接口:多继承

② 面试题:

​ 一个类可以实现多个接口?

​ 可以

​ 一个接口可以实现多个接口?

​ 不可以,接口与接口之间是多继承关系

​ 接口里面的方法不一定都是抽象的?

​ JDK1.8开始接口中允许默认方法和静态方法

​ 接口解决了类的单继承问题?

​ 是的

​ 一个类是否可以继承一个类并同时实现多个接口?

​ 可以

​ 接口可以new对象?

​ 不可以,创建的是匿名内部类的对象

        //1.创建匿名类,实现I5接口中的i5method01方法
        //2.创建匿名类的对象
        //3.赋值给接口的引用
		I5 i5 = new I5() {
			@Override
			public void i5Method01() {
			}
		};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值