Java学习第八天

1)对于==,比较的是值是否相等

        如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

一、* 重载 : -->方法

  • 1.同一个类中
  • 2.多个方法的方法名相同
  • 3.方法签名不同
  • 重写 : -->方法
  • 1.不同的类
  • 2.继承
  • 3.方法签名相同
  • 重写和重载的区别:
  • 子类中一旦方法重写,会对父类中同名的进行屏蔽
  • 如果子类有重写父类中的方法,调用时会调用子类中重写的方法
  • 检测重写方法的方式:
  •  		1.左边有向上的三角
    
  •  		2.在重写方法的上面添加一个注解 @Override
    
  • 重写满足|注意的条件:
  •  		== 方法签名相同
    
  •  		<= 返回值类型:基本数据类型:子父类必须相同		引用数据类型:子类<=父类
    
  •  		>= 权限修饰符:子类>=父类
    
  • 注意:
  •  1.被private修饰的方法不能被重写
    
  •  2.被final修饰的方法不能被重写
    
  •  3.被static修饰的方法不能被重写
    
  •  如果子类中存在于父类静态方法重名的方法,记住要把子类中这个方法定义为静态的
    

二、 * super:指代父类对象

  • this: 指代当前创建对象
    1. 用在构造器的首行可以掉用父类中的构造器
  •  	super(参数)-->匹配父类中构造器的参数
    
  • 	如果没有显示定义,默认在子类构造器的首行存在super(),默认调用父类的空构造
    
    1. 区分子父类同名问题
  •  如果存在同名问题,默认隐藏this,默认就近原则找当前子类中的,如果想要指定父类中,要使用super调用
    
  • 注意:
  •  先父类后子类
    
  •  不能显示同时定义this()和super(),因为都要存在于构造器的首行,但是可以隐式同时使用,默认调用父类空构造,显示调用子类其他构造器
    
  •  就近找局部,然后如果同时存在局部,子类成员,父类成员同名问题,默认找局部,子类成员this,父类成员super
    
  • final 最终的
  • 被final修饰的变量为常量,不能改变
  • 被final修饰的方法,不能被重写
  • 被final修饰的类不能被继承(太监类)
  • 思考: 被final修饰的一个对象的引用,是否能够修改对象中的属性值?
  •  final Person p=new Person();
    
  •  p.name="张三";
    

三、 * Object 所有类的父类(老祖宗类)

  • 在java中的所有类都会直接或者间接的继承自Object
  • toString: 打印一个对象的引用,默认调用这个对象的toString()方法
  •  目的: 打印对象的信息的字符串表示形式
    
  •  类中重写toString方法,自定义方法体的实现
    
  • ==比较地址
  • equals : 可以比较对象的内容是否相同
  •  public boolean equals(Object obj) {
     	return (this == obj);
     }  
    
    equals在Object中默认比较的还是对象的地址

四、* 多态 面向对象三大特性之一

  • 一种事物多种形态|多种表现形式 *
  • 多态的前提:
  • 类的继承 | 接口的实现
  • 多态的最终体现:
  • 父类的引用指向子类的对象
  • 多态的目的:
  • 父类的引用在调用子父类中同名方法的时候,会调用子类中重写的方法
  • 注意:子类中新增的方法对父类不可见
  • 多态使用成员
  • 成员变量:
  •  编译运行找父类
    
  •  编译运行看左边
    
  • 成员方法:
  •   编译看父类,运行看子类
    
  •  编译看左边,运行找右边
    
  •  编译看类型,运行找对象
    

五、* 转型:

  • 孔子{name=孔子;age=18; void teach(){讲论语…} void play(){打王者}}
  • 孔子{name=孔子爹;age=30; void teach(){做生意…}}
  • 有一个人来找孔子爹讲做生意上课,但是孔子爹去旅行
  • 办法: 孔子化妆装成他爹的样子去上课 --向上转型
  •  KongZiDie k=new KongZi();
    
  •  因为真实去的是孔子,所以teach讲课讲的内容是论语
    
  • 因为孔子和同学们关系很好,索引相约一起打王者
  • 卸妆–>变成孔子的样子,因为孔子会打王者
  •  大范围类型	:父类		小范围类型: 子类
    
  •  KongZi z=(KongZi)k;  --向下转型
    
  •  z.play();
    
  • 如果先要调用子类中新增的方法,需要向下转型
  • ClassCastException 类型转换异常
    六、* instanceof 运算符
  •  A引用 instanceof B
    
  •  判断A的引用是否为B类类型的对象,或者B类子类的对象,如果是返回true,否则返回false
    

七、 * 面向对象:

  •  思想
    
  •  封装:对外隐藏内部的实现细节,提供公共的访问方式
    
  •  继承:子类继承父类,就可以拥有父类中的成员
    
  •  多态:在继承的前提下和方法重写的前提下,可以提高代码的服用型和扩展性
    
  • 抽象类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值