抽象类 接口 多态

来源:互联网 发布:网络信息发布软件 编辑:程序博客网 时间:2024/05/08 02:21
抽象类(abstract)
在java中采用abstract关键字定义的类就是抽象类,采用abstract关键字定义的方法就是抽象方法
格式:public abstract class 类名{类体} //定义一个抽象类
     Public abstract 返回值类型 方法名(参数);   //抽象方法
抽象方法没有方法体(也就是说抽象方法没有{}用的是;),用abstract关键字来修饰抽象方法
2.抽象类只能用来继承,不能用来创建对象(也就是说抽象的类不能实例化也就是不能够new)
抽象的方法只存在于抽象类在中,提供声明,不需要实现,抽象类中即可以有抽象方法也可以有普通方法,抽象的方法在抽象类中只提供声明,不需要实现,(抽象类中不一定有抽象方法,但是抽象方法必须存在于抽象类中)
如果一个类中含有抽象方法,那么这个类必须定义成抽象类  抽象方法必须在抽象类中
如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类中不复写该抽象方法,那么必须将此类再次声明为抽象类

抽象的类是不能实例化的(就是不能new),抽象类只能继承不能用来创建对象(抽象的类在子类中被重写,那么这个子类也就意味着是普通类,那么,在创建一个普通类就可以在子类中创建对象了)(父类是抽象类,子类是普通类,在创建普通类,就可以在子类中创建对象了)
就像现实世界中人其实是抽象的,张三、李四才是具体的
抽象类不能被final修饰
抽象方法不能被final修饰,因为抽象方法就是被子类实现的(在子类中重写)
接口    
Java中使用interface来表示接口,接口可以看做是一个特殊的抽象类
在接口中只能定义抽象的方法和常量(接口中只能是抽象方法)
在java中接口采用interface声明(接口不是类)
格式:public interface 接口名{类体}    
接口中的方法默认都是public abstract,(抽象的方法),不能更改    
接口中的变量默认都是public static final类型的,不能更改,所以必须显示的初始化
接口不能被实例化,接口中没有构造函数的概念
接口之间可以继承,但接口之间不能实现
接口中的方法只能通过类来实现,通过implements关键字 
格式:public class 类名 implements 接口1,接口2,接口3{}
Java 是单继承的,多实现的,接口的实现类必须重写接口中的所有抽象方法
接口与接口之间,类与类之间都叫做继承,类与接口之间叫实现
接口和抽象类之间的关系
    共同点:
都可以有抽象方法
都不能被实例化
一个类要实现一个抽象类那么必须重写它里面的所有抽象方法,一个类要实现接口,也必须重写接口中的所有的(抽象)方法

   不同点:
接口不是类,用interface定义,抽象类是一个用abstract修饰符修饰的类
接口里面只能有抽象方法,抽象类可以有普通方法和抽象方法
实现接口需要implements;实现一个抽象类,需要继承,一个类可以实现多个接口,但是只能继承一个类
接口里面定义的变量默认是public static final的,是常量 。而抽象类则没有这个限制
注意:
    一个类既可以继承类又可以实现接口,但是要先继承类,在实现接口

接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强大的可接插性
抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中
面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)
优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

多态
多态其实就是多种状态的含义,

 多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

Java中多态状态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。(多态:多种状态的体现)

接口,继承,重写,重载, 
Object类
Object类是所有Java类的父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
toString()  转化成字符串
返回该对象的字符串表示。通常toString 方法会返回一个“以文本方式表示”此对象的字符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记@和此对象哈希码的无符号十六进制表示组成,Object类toString源代码如下: 
getClass().getName() + '@' + Integer.toHexString(hashCode())

在进行String与其它类型数据的连接操作时,如:
 System.out.println(student);,它自动调用该对象的 toString()方法
==与equals方法    
等号“==”
等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址    
    == 两边是基本数据类型的时候,比较的是值相等
== 号两边是对象(或String 类型)的时候(用equals),比较的是两个对象的内存地址是否相等,每new出一个对象,内存地址都是不一样的
当我们比较对象是否相等的时候,使用equals方法,但是我们需要重写equals方法因为在Object中equals也是通过==比较的
String不属于基本数据类型,所以String比较值是否相等也是通过equals方法
Finalize()
垃圾回收器(Garbage Collection),也叫GC,垃圾回收器主要有以下特点:
当对象不再被程序使用时,垃圾回收器将会将其回收
垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他,尽快回收资源(System.gc和Runtime.getRuntime().gc())
垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize方法
GC主要针对堆内存


当垃圾收集器将要收集某个垃圾对象时将会调用finalize,建议不要使用此方法,因为此方法的运行时间不确定,如果执行此方法出现错误,程序不会报告,仍然继续运行
0 0
原创粉丝点击