本文主要是介绍Day09-Object类和多态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Day09
- 总结
- Object的常用方法
- hashcode()
- toString()
- equals()
- super关键字
- 多态
- final关键字
总结
我是最棒的!基础不牢,地动山摇!
Object的常用方法
hashcode()
//调用hashcode(),返回一个int型的哈希值,对象的地址由哈希值转换为16进制而得String str = "123";int num = str.hashcode();
toString()
//一般要重写toString()方法,打印自己需求的格式@Overridepublic String toString() {String str = "["+this.name + "," + this.age + "]";return str;}
equals()
==用来判断基本数据类型的值是否相等,或者是引用数据类型的地址是否相等
equals的底层还是==,但是我们可以重写equals方法来满足我们的需求
String的equals是JDK自己重写好的,我们在自己写的类中可以直接自动生成重写的equals方法。
//JDK中Object的equals方法
public boolean equals(Object obj) {return (this == obj);}//String重写的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;}
super关键字
super指代的是父类对象
作用:可以在子类中访问父类的成员
public class Animal{//字段String name;//构造方法public Animal(){}//普通方法public void test(){System.out.println("test");}}public class Person extends Animal{public Person(){//调用父类的构造方法(非static),写在子类构造方法的第一行,不能和this同时存在super();}public void testSuper(){//调用父类的字段super.name = "子类";System.out.println(super.name);//调用父类的普通(非private,非static方法)super.test();}}
多态
多态就是有继承关系的类,父类变量来保存子类对象,当用父类变量调用方法的时候
如果子类重写了方法,则会调用子类重写的方法(向上造型)
如果需要调用子类中特有的方法,需要用instanceof判断之后,再使用强制类型转换
作用
- 可以提高代码的复用和扩展性,及时利用javaGC回收垃圾
- 可以屏蔽子类差异性
注意事项
- 必须是继承关系
- **字段(成员变量)**没有多态
- 多态主要体现在调用方法的时候的表现
示例代码如下
public class Animal {int age = 1;public void eat(){System.out.println("吃...");}
}public class Person extends Animal{int age = 2;//重写父类的eat方法@Overridepublic void eat() {System.out.println("人吃肉");}}public class Pig extends Animal{int age = 3;//重写父类的eat方法@Overridepublic void eat() {System.out.println("猪吃菜");}public void gong(){System.out.println("拱白菜");}
}public class PolymorphicTest {public static void main(String[] args) {//向上造型,多态Animal animal = new Person();animal.eat();//向上造型,多态animal = new Pig();animal.eat();//向下造型,判断类型之后,强制类型转换if(animal instanceof Pig){Pig pig = (Pig)animal;pig.gong();}}
}
多态解决类差异性
//人会开车drive(){调用车的run方法}:法兰保、法拉利、保时捷、兰博基尼。 车:run()
//车类是各种车型的父类,每种车型重写父类的run方法public class CarTest {public static void main(String[] args) {//创建一个开车的人Person person = new Person();//创建四种车对象Car faLanBao = new FaLanBao();Car ferrari = new Ferrari();Car porsche = new Porsche();Car lamborghini = new Lamborghini();//调用person的drive方法person.drive(faLanBao);person.drive(ferrari);person.drive(lamborghini);person.drive(porsche);}}
final关键字
final是最终的,一个关键字,也是一个修饰符
可以修饰的
从类层面来看,就是一个最终的类;
final修饰的类不能够有子类(太监类)
用final修饰一个方法,表示这个方法是最终的方法;
特点:① 最终的方法,从方法层面不能够被拓展;
② final修饰的方法不能够被覆写;
变量 (一旦有值不能被更改)
常见用法 : 全局常量 public static final修饰的(常量名全部大写,有多个单词用下划线隔开)
public static final double PI = 3.14;//圆周率
不可以修饰的
构造方法
特点
一旦被第一次赋值后,就不能后续赋值,是不可改变的
使用场景
如果不想让其他人改变已经写好的成员,就可以使用final修饰
一般是public static final连用,比如常量PI(圆周率)
这篇关于Day09-Object类和多态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!