java面向对象-4(多态和抽象类)

多态

多态是java面向对象三大特性(封装、继承、多态)的最后一个,简单描述多态就是:父类型的引用指向子类型的对象

常用定义格式:父类类型 对象名称=new 子类类型()

在方法中,实参也可以是形参的子类对象,同样,实际返回的对象也可以是返回值类型的子类

多态方法重写使用注意事项:

返回值类型要相同,或是父类返回值类型的子类

访问权限不能低于父类

私有方法无法被重写

不能抛出比父类更大的异常(只能抛出父类抛出的异常或父类抛出异常的子类)

抽象类

抽象类用来描述某一类事物应该具备的基础属性和功能,但具体如何实现交给子类完成

抽象类可以理解为一个模板,规定了该类型的子类应该具备的功能和行为,但是没有对这些属性和行为做出具体描述,需要由子类去完成

//抽象类的定义
public abstract class AbsClass{//当类中有抽象方法时,类就必须声明为抽象类
	public abstract void method();//抽象方法不能有方法体
	public void method2(){
		System.our.println("抽象类中也可以有普通方法");
	}
}
//实现类
//当继承抽象类时,就必须重写抽象类中的全部抽象方法,否则该子类也要声明为抽象类
public class ImplAbsClass extends AbsClass{
	@Override
	public void method{
		System.out.println("抽象方法被重写");
	}
}

抽象类特点:无法直接创建实例化对象,当且仅当抽象类中的抽象方法被重写后才可以创建实例化对象

重写抽象方法有两种方式(也可以认为是一种)

1、创建抽象类的实现类,重写抽象方法

2、通过匿名内部类方式,创建抽象类对象的同时重写抽象方法

Object类常用方法

toString

/*这是Object类中toString方法的原码
可以看到返回的字符串由三部分拼接而成,
第一部分是全类名(getClass获取字节码文件 getName获取全类名)
第二部分拼接符@
第三部分是十六进制的地址值hashCode获取地址值,Integer.toHexString转为16进制*/
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
public class Test{
	private String name;
	private int age;
	/*在输出时,直接输出对象,都是输出对象的toString返回值
	但是可以通过重写toString方法,改变输出结果
	常用输出格式为:类名{属性名=属性值,...}
	在IDEA中可以通过alt+insert快速生成*/
	@Override
	public String toString(){
		return "Test{" +"name='" + name + '\'' +", age=" + age +'}';
	}
}

equals

/*在未重写equals方法时,两个引用类型之间对比就是默认使用Object类中的equal方法
此时与直接==对比没有区别,都是比较两个对象的地址值是否相等*/
public boolean equals(Object obj) {
	return (this == obj);
}
/*可以通过重写equals方法,定义比较对象的标准*/
public boolean equals(Object o) {
	if (this == o) return true;//判断两个对象地址值相同直接返回true,提高效率
	if (o == null || getClass() != o.getClass()) return false;//若传入对象为空或者不是同一类型对象则返回false
	Test test = (Test) o;//判断为同以类型对象后,强制向下转型,也可以用instanceof替代
	return age == test.age && Objects.equals(name, test.name);//定义年龄和姓名相同即认为是一个人
    }

hashCode

获得对象的十进制地址值

getClass

获取字节码文件的三种方式之(Class.forName;类名.Class;对象名.getClass)一,反射部分详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值