java基础三 [深入多态,接口和多态](阅读Head First Java记录)

抽象类和抽象方法

1.抽象类的声明方法,在前面加上抽象类的关键词abstract

abstract class canine extends animal{

public void roam(){}

}

抽象类除了被继承过之外,是没有用途,没有值,没有目的。类中的方法可以当做子类的合约内容,合约是对其他程序的承诺协议

抽象类中可以带有抽象和非抽象的方法

如果类中有抽象方法,则类必定标识为抽象的。

2.抽象的方法没有实体

(因为方法中的程序代码没有意义。抽象类需要被extend过有意义,抽象方法一定要被覆盖才有意义)

public abstract void eat();//没有方法体,直接分号结束

注意:声明的抽象方法必须在抽象类下,不允许非抽象类拥有抽象方法。

3.使用抽象类和抽象方法的好处

多态,使用父类参数作为方法的参数、返回类型或数组类型,这样不同的子类不用写很多种方法,多态的好处就是所有的子型都会有那种方法

Object类

java中所有的类都是从Object这个类继承出来的,Object不是抽象类。

1.Object类有两个目的

作为多态让方法可以应付多种类型的机制;

提供了部分方法的具体代码实现,使得任何类在执行期都有方法可用。

2.Object类作为终极对象,它具有哪些主要方法

equals(object o)//对象是否相等

getClass()//获得对象被初始化的类

hashCode()//获得对象的hash代码,唯一id

toString()//列出类的名字等信息

3.为什么不所有参数和返回类型都设定成Object

3.1java是类型检查很强的语言,编译器是根据引用类型来判断有哪些method可以调用。如果想调用子类中有父类中没有的方法,就不能用父类做引用变量。例如:

Object o=new ferry();

o.gofast();//非法,Object中没有这个方法。

3.2使用Object定义的变量返回的值也是Object类型的,将不能被赋值为其他类型的变量。

例如当把对象装进ArrayList<Object>时,不论它原来时什么类型,现在只能把它当作Object类型。这样你就只能使用Object的方法(当然可以使用强制转换来更改类型)

4.将Object转换为原来的类型

Object o =al.get(index);

Dog d=(Dog) o;//使用(Dog)进行强制转换

d.roam();

如果不确定对象是不是Dog,可以使用instanceof来判断类型,如果转换错误会抛出异常ClassCastException:

if(o instance Dog){

Dog d=(Dog) o;

}

接口

接口是100%纯抽象的类(无法被初始化的类)。想要更好的使用多态需要接口。接口相当于一个规范,子类需要实现所有的方法。

1.为什么要有接口?

a.有些类不适合初始化,比如animal,而他的子类是可以被实例化的,比如dog。所以为了防止这个类被初始化(被new出来),通过标记类为抽象类来实现。抽象类不能被实例化,但是可以作为引用类型。

b.可以很好的解决java不能多重继承的问题,解决方法就是把所有方法都设为抽象的,让子类将所有的方法重写一遍。

(我理解的接口,定义一个抽象的合约规范,然后子类去实现这个接口的具体方法,这样子类肯定遵守来这个合约规范,更好的使用了多态)

2.接口的定义(使用关键字interface)

public interface pet{具体的abstract抽象方法,没有内容,直接分号结束,可以不写abstract关键词也是默认抽象的}

例如:

interface pet{

String name=“cat”;

void run();

String jump();

}

说明:

a.public修饰符不是必填的,如果不写接口的权限为默认的public的abstract类

b.接口可以继承自其他接口

c.接口的方法也不用填写public等修饰符,默认public。且方法不需要写abstract关键词,也表示是一个抽象方法

d.接口的常量默认是public static final标志

3.接口的实现

public class dog extends canine implements pet{具体的接口实现,必须在这里实现接口下所有方法的实现,这是合约规定}

说明:

a.使用implements关键词来实现接口

b.如果既要继承父类又要实现接口,extends写在implements前面

c.一个类可以一次implements多个接口(使用逗号隔开),引用多个接口同名变量时使用接口名.常量来定义,如果是方法名同名,定义一个方法就可以了。

d.子类调用父类的方法,可以使用super.xxx();

e.UML类图使用虚线箭头表示接口的实现(箭头指向接口)也可以用圆圈表示;实线空心封闭箭头表示继承(箭头指向父类)[但是不知道为什么书上用的是实线箭头来表示的继承]

时间: 2024-10-12 10:00:36

java基础三 [深入多态,接口和多态](阅读Head First Java记录)的相关文章

java基础2:抽象类、接口与多态

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java基础5:抽象类和接口

Java基础5:抽象类和接口 1 抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder. 2 接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,如果你想实现一个具体map,这些方法就必须按照规定去实现. 3 另外,一个类可以实现多个接口,但是不能继承多个类. 然而接口却可以继承多个其他接口.这一点很神奇. 下面看一下具体的例子,有一些小细节平时可能不会注意. cl

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

Java基础第9天+final关键字、多态(上转型,下转型)、抽象类(特点,成员特点)、接口(特点,成员特点)

1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: A:局部变量 a:基本类型 值不能发生改变 b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的 B:初始化时机 a:只能初始化一次. b:常见的给值 定义的时候.(推荐) 构造方法中. 2:多态(掌握) (1)同一个对象在不同时刻体现出来的不同状态. (2)多态的前提: A:有继承或者实

java基础知识总结--继承和接口

什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可.多个类称为子类,单独的那个类称之为父类,超类.或者是称为基类. 什么是接口? 接口在Java编程语言中是一个抽象类型,是抽象方法的集合,接口并不是类,编写接口的方法和类很相似,但是他们属于不同的概念,类描述对

Java基础(十一):接口

一.接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法.除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口无法被实例化,但是可以被实现.一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类.另外,在 Java 中,接口

JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存取速度较慢. 栈的优势是

java基础学习总结——GUI编程(一) 还未仔细阅读

一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Container里面又分为Window和Pannel,Window是可以独立显示出来的,平时我们看到的各种各样的

黑马程序员--java基础------继承,抽象,接口

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------  继承 一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单独的这个类称为父类或者超类. 这样类与类之间就存在了继承的关系.子类可以直接访问父类中的非私有的属性和行为.在代码中通过extends关键字表示继承关系.例: class