一、对象转型
1、向上转型:父类的引用指向子类的对象(父类的引用指向子类的对象的时候不能使用子类多出来的成员)
2、向下转型:简单一句话其实就是强制类型转换
二、toString()
默认调用情况:1、使用System.out.println() 控制台上只显示字符串,所以在打印之前要先转换成字符串类型再输出
2、当出现使用‘+’号连接字符串的时候
toString
方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。
在自己写的类中建议重写toString()方法,这样有时候会使我们的程序更加简洁输出界面更加美观
如下程序重写的toString()方法使得程序输出更加美观:程序中规定了toString的输出方式,使得程序的输出美观
public class test{ public static void main(String[] args){ Person p1 = new Person("jack",34); Person p2 = new Person("tom",21); System.out.println(p1); System.out.println(p2); } } class Person{ Person(String name,int age){ this.name = name; this.age = age; } String name; int age; public String toString(){ return ("name is:" + name + " age is:"+ age); } }
三、“==”和equals的区别以及使用方法
“==”比较的栈区的内容;而equals比较的是堆区的内容
一般我们在写一个类的时候最好是重写equals方法,这样的话可以满足用户自己的需要来进行对象之间的比较,用以实现用户的相关功能
但是如果我们重写了equals的方法也一定要重写hashCode()方法
相等的对象一定有相等的哈希码 相等的哈希码不一定有两个相等的对象(因为内存中有相同的哈希码的一片区域可以有很多个对象)
例如一下程序重写的equals方法:我们可以自己规定equals的比较方法
public class test{ public static void main(String[] args){ Person p1 = new Person("jack",21); Person p2 = new Person("tom",23); System.out.println(p1.equals(p2)); } } class Person{ Person(String name,int age){ this.name = name; this.age = age; } String name; int age; public boolean equals(Object obj){ Person p = (Person)obj; if(this.name.equals(p.name)){ return true; }else{ return false; } }
public int hashCode(){
return this.name.hashCode();
} }
四、final关键字
1、加在成员变量上,表示常量
2、加在方法上,表示不能被重写
3、加在类上,表示不能被继承
五、abstract(抽象的)
1、加在类上,不能实例化(不能创建对象)
2、一个类是用来被继承的,比如说多态的时候父类的引用指向子类的对象的时候,父类不需要实例化
3、抽象的方法就是用来被重写的,并且方法是抽象的那么类也必须是抽象的
4、抽象的类中可以有抽象的方法也可以有非抽象的方法
六、interface(接口)
1、接口就是一种特殊的抽象的类(只有抽象方法和常量)
2、它就是一种规范标准
3、接口称之为类实现了接口,方法也称之为实现
4、接口与类之间叫实现,接口之间叫继承,接口可以有多个,父类只能有一个,
方法都是默认的 public abstract类型 常量默认都是public fianl static
一下程序详细的描述了接口的几大特征的呈现:
public class test{ public static void main(String[] args){ Animel animel = new Animel(); animel.catching(); animel.sleep(); animel.run(); } } interface cat{ //写一个接口 public void catching(); } interface mouse{ public void run(); //这是一个抽象方法 } interface dog{ int num = 10; // 一个抽象的常数 其详细的表示方法为:public fianl static int num = 10; public void see(); } interface pig extends cat,mouse,dog{ //多继承,接口之间继承可以有多个 public void sleep(); } class Animel implements pig{ //类与接口之间为实现 只允许有一个父类 public void catching(){ System.out.println("cat is catching"); } public void run(){ System.out.println("mouse is running"); } public void sleep(){ System.out.println("pig is sleeping"); } public void see(){ System.out.println("dog is see"); } }