java基础Day09

继承中一个经典的应用就是equals方法
equals跟==的区别:
****是一个判断相等的运算符
这个运算符两边如果是基本数据类型,判断的是基本数据类型的值是否相等
比如:
int i=3;
int j=3;
System,out,println(i
j);//true

	这个运算符的两边如果是某个类类型的对象,判断的是两个对象是否是同一个地址,
	如果地址相同,那么内容就一定相同
	如果地址不相同,那么内容就不一定相同
**equals**方法不能判断基本数据类型的数据,只能判断对象是否相等
	如果没有重写equals方法,那么equals方法判断的是地址
	因为equals方法是继承自Object的equals方法,Object类中的equals方法判断的是地址
	如果某个类重写了equals方法,那么就看equals方法中实现的
	判断是什么,一般情况下判断的是equals两端的对象的内容
	在java的类库中像String,封装类(integer,float,double..)
	中的equals

instanceof 运算符
instanceof运算符左边是一个对象,instanceof运算符右边是一个类
判断instanceof左边的对象是否实施右边类类型对象
instanceof运算符的返回值是boolean
比如:
Student stu=new Student();
System.out.println(stu instanceof Student);//true

抽象类:
如果一个类,有方法没有方法体,那么这个方法就是抽象方法
即,方法只有声明,没有方法体
如果一个类中,只要有抽象方法,那么这个类就是抽象类
说明这个类不具体

抽象类也是类,有类就可以放属性和方法(带方法体,不带方法体)
抽象类中可以放置属性,属性使用来存储数据的
抽象类中可以放置有方法体的方法,此方法能够完成某些功能
抽象类中可以放置没有方法体的方法,这个方法就是抽象方法
	只要类中有一个抽象方法,这个类就是抽象类

抽象类是不能实例化对象,因为抽象类有抽象方法
程序员不能实例化,并不等于jvm不能实例化对象

抽象类只能当父类,
如果在子类中把所有的抽象方法都补上方法体,
那么这个子类就不是抽象类了,就可以实例化对象了
同时也可以调用方法了
如果在子类中没有把所有的抽象方法给补上方法体
那么这个类还是抽象类,满足抽象类的用法

抽象方法不能用static ,final,private修饰

**抽象类的应用场景:**
	在父类中有一些方法体,或者没有必要给上方法体
	此时把方法做成抽象方法,那么此类就变成抽象类
	比如:
	shap形状类中有一个方法叫做draw()绘制图形的方法
	Triangle继承自Shap类,draw()方法就可以绘制三角形
	Retangle继承自Shap类,draw()方法就可以绘制矩形
	shap类中的draw方法就应该是抽象方法,因为shap
	不代表具体形状,所以没办法复制

把抽象类抽象到极致,所有的方法都没有方法体,
此情况不建议做成类,建议做成接口
接口:
接口中的所有的方法都是抽象方法,即没有方法体,接口方法
接口中可以放属性,但属性默认是public static final的
接口不适合存储数据,更适合做功能
而类适合存储数据

接口的特点:
接口中的方法和属性都是公有的
接口是不能实例化对象的
必须由子类实现接口,且子类可以实现多个接口,解决java的单继承问题
多个接口用逗号间隔
子类实现接口的关键字implements
直到子类把接口中的所有的方法都实现了,才可以实例化子类对象
否则子类就是抽象类
接口中可以有属性,但默认的是public static final不适合存储数据
接口中可以有方法,方法必须都是没有方法体的,且是公有的,public可以省略
定义接口的关键字interface
接口不能实现接口,但接口可以继承接口,而且还可以多继承
即接口extends接口1,接口2…
接口中没有构造方法

结论:
接口更适合放置方法,而不适合存储数据
类适合存数据,抽象类和普通类
接口就是对子类功能的规范,子类必须全部实现接口中的方法

接口的案例:
Person 接口:
Study()
Eat();

Abstract CommonPerson类 实现了person接口
	String name;
	Int age;
	Abstract study();
	Abstract eat();
	Sleep()
	
Student类 继承自CommonPerson
	String stuNo;
	
	重写:是学生的学习方式和吃的方法
	Study();
	Eat();
	自己的方法
	Homework();
	
Teacher类 继承自CommonPerson
	Int salary;
	重写:是老师的学习方式和吃的方法
	Study();
	Eat();
	自己的方法:
	Teach();

为什么要使用接口:
1.用接口可以限定子类,必须实现接口规定的所有方法
以保证项目功能的完整性
2,用接口可以实现多态,有接口就一定有继承,而多态是以继承作为基础的

多态:
顾名思义就是多种表现状态
最直观的理解:有对象名称,用对象名称打点调用方法
在不同的时候执行的方法的功能是不一样的
*多态的判断标准:(重要的)
1.跨类且继承,多态是以继承作为基础的
2.子类重写长辈的方法
3.子类对象赋值给长辈的引用
比如:
CommonPerson cp=new Student();
Person p=new Student();
Object obj=new Student();
4.用长辈的引用打点调用方法
-用对象打点能调用出哪些方法,取决于这个对象所对应的类
或接口中有哪些方法
-如果用长辈的引用打点调用的方法,是重写过的方法,
那么就执行子类重写后的方法
-如果长辈的引用打点调用的方法是没有重写的方法,
则执行的是本长辈中的方法

能够表达出多态的应用场景:
1.以长辈作为方法或函数的参数
2.以长辈作为方法或函数的返回值
如果不用多态:
-代码的书写量大
-结构不优化
-代码的复用率不高(复用率低)
-最终导致开发效率低
-优点,代码的可读性很高
如果使用多态:
-把所有的共用属性抽象出来放在长辈类中
-把所有共用方法抽象出来放在接口中,用于表示功能
-使用多态会增加类和类之间的关系,导致类和类之间的复杂度增高
-使用多态可以提高代码的复用率
-使用多态,可以大大提高开发效率
-使用多态,程序的结构优化

上一篇:java学习日志day09


下一篇:day09-初识函数