Object类,多态,对象转型,抽象及接口
Object类
Object类是所有类的父类
java中只要是类就会直接或间接继承Object类
java中为单继承,只要类没有显示extend父类,则默认父类为Object类
//默认public class Test extends Object{}
public class Test{
}
toString方法
把对象的引用默认以字符串的形式打印
Test test = new test();
//打印对象的引用
System.out.println(test);//默认调用toString方法 System.out.println(Tets.toString());
equals方法
equals可以比较引用类型(默认比较的是引用的地址)
Test x = new Test();
Test y = new Test();
//默认比较对象的引用地址
x.equals(y);//false
y = x;
x.equals(y);//true
//如果需要比较对象内的内容,则需要重写equals方法
多态
事物|对象的多种形态的体现
多态分为类的多态及接口多态
作用
提高代码的复用性,减少重复性,简化代码,且使用起来更灵活
前提
必须有继承关系
要有重写
父类引用指向子类对象
体现
父类类型 类名 = new 子类对象();
//父类引用,引用子类对象
Father f = new son();
特点
编译的父类类型,所以只有父类的内容,子类的新内容不可见
运行时调用的是子类重写的方法
多态使用成员时:
成员变量:编译看父类
成员方法:编译看父类,运行看子类(子类没有重写时,还是继承使用父类方法)
对象转型
转型是对象多态的体现
前提
继承关系
使用
//向上转型 子类转父类,自动转换
Father f = new Son();
//向下转型 父类引用转回子类引用,需要强转
Son s = (Son) f;
java是单继承,所以不能将父类下的a子类转成b子类(a,b类是两个无关类)
a子类转b子类不会编译报错,但是会运行报错(ClassCastException 转型异常)
instanceof
引用 instanceof 类型
//转型时可以使用instanceof运算符判断
Father f = new Son();
//使用instanceof运算符比较引用是否为类型的对象|子类的对象
if(f instanceof Son){
//true则可以进行向下转型,false则不可以
Son s = (Son) f;
}
抽象类
被abstract修饰的类就是抽象类
被abstract修饰的方法就是抽象方法
抽象方法必须存在与抽象类当中,抽象方法没有方法体
public abstract class Test{
//抽象类中可以存在成员属性
int a;
public abstract void test();
//抽象类中可以存在成员方法
puvlic void test1(){
}
}
特点
抽象类不能被实例化
抽象的方法必须被重写
抽象方法只需要按需被重写一次
abstract不能与private(私有的不能被重写) static(静态的不在对象内存中,不能被重写) final(最终的不能被重写) native(本地的)一起使用
使用
具体子类:重写抽象父类的抽象方法,按需新增新的内容
public abstract class Test{
public abstract void test();
}
//具体子类
class Test1 extend Tets{
public void test(){
System.out.println("具体子类");
}
}
抽象子类:按需重写抽象父类的抽象方法
public abstract class Test{
public abstract void test();
public abstract void test1();
}
//抽象子类
abstract class Test1 extend Tets{
public void test1(){
System.out.println("按需重写抽象类");
}
}
接口
接口是完全抽象的,所以可以定义开发规范
接口是多态的体现
接口能多实现
接口可以解耦
接口提高代码的复用性
使用
//定义接口interface
public interface Test{
//接口是完全抽象的,不能被实现,所以不能有成员属性
int A;//默认public static final A = 5;
//接口是完全抽象的,不能被实现,所以方法全部都是抽象方法
void test();//默认public abstract void test();
}
//实现接口interface
public Test1 implements Test{
}
特点
一个类要先继承父类,再实现接口
接口可以多继承接口,但是不能实现接口