Java抽象类与接口

一.抽象类

抽象类和普通类只有一点区别,那就是抽象类中包含抽象方法,普通类没有,其它的和普通类一样,正是抽象方法才让它的使用和普通类不一样。
抽象类是设计用来专门当父类的,作用类似于模板,目的就是就是让设计者依据它的格式创建新类,抽象类不能直接创建对象,只能通过继承它创建新类由新类创建对象,它使用规则如下:
图一
子类必须覆写抽象类中的全部抽象方法。
一个抽象类不能使用final关键字声明,抽象方法不能使用private方法声明,抽象类中可以有构造方法。抽象类的定义格式如下:
abstract class 类名称{
属性;
访问权限 返回值类型 方法名称(参数){
[return 返回值];
}
访问权限 abstract 返回值类型 方法名称(参数){
//在抽象方法中没有方法体
}
}

二.接口

接口可以理解成一种特殊的类,是由全局常量和公共的抽象方法所组成的,定义格式如下图:
图二
在接口中抽象方法必须定义成public,即使不写也是public权限,而不是default。
一个子类实现接口必须实现接口中所有的抽象方法。
接口要使用也必须通过子类,用implements关键字,声明格式如下图:
图三
由声明可以看出一个子类可以实现多个接口,这已经摆脱了Java的单继承局限。
子类也可以同时继承抽象类和实现接口,定义格式如下图:
图四
接口也可以多继承,定义格式如下图:
图五
子类必须覆写抽象方法,不管它是接口中的还是抽象类中的。

三.对象多态性

多态在Java中表现为重载和覆写。还有对象的多态性,分为向上转型和向下转型。对于向上转型,程序自动完成,对于向下转型,必须要明确指明要转型的子类类型,定义格式如下:
图六
向上转型是安全的,因为子类对象实例一定是父类对象实例;但是向下转型不安全,所以向下转型时必须要发生向上转型,否则会发生转换异常。
假设B是A的子类,向下转型时应该要 A a = new B();这相当于子类自己去实例化父类对象,这样父类就知道了自己有这么一个子类,这样就不会发生异常了。
**发生向上转型后,父类对象调用的一定是被子类覆写过的方法。**所以多态好
**instanceof关键字:**判断一个对象是哪一个类的实例,格式如下:
对象 instanceof 类 ----->返回boolean类型
对象向下转型时可以先进行判断再进行相应的转换工作,这样可以避免转换异常的出现。
类的设计中重点在于父类的设计,永远不要去继承一个已经实现好了的类,只能继承抽象类或接口,因为一旦发生对象的向上转型后,所调用的方法一定是被子类覆写了的方法。
抽象类可以理解成模板,接口可以理解成标准。
接口是功能方法的集合。
二者区别联系如下图:
图七

四.Object类

Object类是所有类的父类,其中有以下方法:
图八
对于toString()方法:对象输出时一定会调用它打印内容,所以我们可以通过它取得对象的一些信息。

public class TestExtends {

	public static void main(String[] args) {
		Person4 person4 = new Person4("张三",17);
		System.out.println("对象信息:"+person4);
	}

}

class Person4{
	private String name;
	private int age;
	public Person4(String name,int age){
		this.age = age;
		this.name = name;
	}
	public String toString(){
		return "姓名:"+this.name+";年龄:"+this.age;
	}
}

equals()方法就是用来对象的比较。但它默认是对对象地址的比较,而不是对象内容。
Object接收任意引用类型的对象,包括数组和接口类型,所以在类库设计上很多都采用Object作为方法的参数,这样比较好操作。

五.包装类

Java中一切皆对象,但是基本数据类型又不能称之为对象,此时就要对基本数据类型进行包装,这就是包装类的作用。如下图:
图九
其中Character,Boolean是Object的直接子类,而其它六类是Number的子类,Number类是一个抽象类,主要是把包装类的内容转换成基本数据类型。
装箱是指把基本数据类型变为包装类,拆箱是指把包装类变为基本数据类型,其中JDK1.5之前要自动装拆箱,JDK1.5后系统自动装拆箱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值