继承
继承的概念
类的公共属性【字段,方法】
.把公共的属性提取出来形成一个公共的类,让其他的类去继承:减少代码的冗余度
继承的语法
继承的语法:
class A{}
class B extends A{}
B这个类继承到了A类
可以继承哪些
非私有的字段和普通方法
java中继承特定
Java中类的继承只能够是单继承:
可以支持多重继承【间接父类:类是可以有老祖宗的】
.每一个类都有一个直接父类【一个人一定是有亲爹的】
如果没有看到显示的继承代码,那么就隐式继承就Object
覆写
为什么要方法覆写
父类自带的方法无法满足子类需求
方法覆写的基本语法
方法名,形参,返回值不变
方法覆写的细节
1)保证子类方法和父类方法的方法签名(方法名+参数列表)一致;
2)访问权限 : 子类方法的访问权限(修饰符)不能够比父类方法的访问权限更低;
pirvate<默认不写<protected<public 小--->大
3)static方法不能够被覆写 : java规定
面向对象的角度去理解:
类级别
对象级别
4)返回值类型 : 子类方法的返回值类型可以是父类方法的返回值类型的子类或者相等
问题代码: int long根本不是类,也不是同一种类型,int也不是long的子类
5)方法主体 : 方法覆写,子类方法和父类方法主体是否可以一样, 可以! 但是没有什么暖用!
方法覆写总结
就近原则:如果子类自己里面已经有了对应的函数,调用自己的
.如果子类覆写的方法,名字或者其他不符合覆写规则,不是覆写了!
注解:Override:验证当前的这个方法是否是在覆写父类中的方法
注释:给程序员看的
注解:给程序看的:
现在对于注解:此处学会用,感受,未来会专项学习的
接下来覆写会犯得错误:明明叫你复制,偏偏要自手写.....
Object类
Object的引入
所有的对象及数组,都可以调用Object类中的,非私有的方法
介绍Object里的方法
hashCode() ,toString(), equals()等
覆写Object中的toString方法
/*覆写toString方法*/
public String toString(){
return name+"------"+id;
}
1.覆写toString的意义?
1.为了获得对象的字段信息的字符串描述
2.未来:用自己写的类:还有可能用别人写的类
1.System.out.println(stu);
1.打印的是地址值:说明类没有覆写toString
2.打印的是对象信息:说明一个类是覆写了toString
3.往后开发中:写类:什么时候需要我们去覆写toString
1.用别人的类:不需要因为那是别人的代码
2.自定义类的时候:需要覆写toString
覆写equals方法
public boolean equals(Object obj){
/*return this.name==obj.name&&this.id == obj.id;
obj:Object类型:编译只看类型不看值:Object根本没有name属性,id属性
怎么搞:明明知道obj在使用的收,传入的是stu2
还原真实类型:数据类型转换
研究完成:== equals区别之后:分析下面代码有不有问题?
return this.name == stu2.name&&this.id == stu2.id;
name字段:是String类型:引用数据类型 String 类 值应该是对象String str = "字符串";
name字段是一个String类型的对象,name字段应该调用自己的equals方法
*/
Student stu=(Student)obj;//强制类型转换
return this.name==stu.name&&this.id==stu.id;//返还判断结果
equals和==号的区别
equals比较的是对象地址值
==比较的是值
访问权限修饰符
权限修饰符的介绍
权限修饰符:private <默认不写(注意不要添加default修饰)< protected < public
作用:主要是控制类以及类中成员的访问权限
权限修饰符内容测试
public默认 ①可以修饰类[内部类 和 外部类]
private protected①不能够修饰类外部类
都不能够修饰局部变量
权限修饰符的使用原则
如果不希望别访问,私有化private权限
如果希望别人访问,提供公共的权限public
如果特殊情况:权限由小到大设置