java抽象类和接口,java抽象类与接口编程例题

  java抽象类和接口,java抽象类与接口编程例题

  00-1010I、抽象类1、抽象类语法2、抽象类特征3、抽象类功能2、接口1、接口概念2、接口用法3、接口特征4、多个接口的实现5、接口继承6、常用接口(1)可比接口(2)可克隆接口3、对象类

  

目录

在Java中,如果一个类被抽象修饰,就叫做抽象类,抽象类中被抽象修饰的方法叫做抽象方法。抽象方法不需要给出方法体。

 

  00-1010//抽象类:抽象修改的类公共抽象classshape抽象方法:抽象修改的方法,无方法体公共抽象void drew();//普通方法和属性publicdoublegetarea(){ return area;}}【注意】抽象类也可以包含普通的方法和属性,甚至构造方法。

  

一、抽象类

抽象类不能直接实例化对象。抽象类不能用private、final和static来修饰,因为抽象方法是要被子类重写的。不一定包含抽象方法的抽象类必须被继承。如果被普通子类继承,被继承的子类需要重写父类中的抽象方法。如果抽象类B继承了抽象类A,那么就不需要在B中重写A中的抽象类,但是它最后继承的子类需要重写所有的抽象方法。

 

  00-1010抽象类本身不能实例化。要使用它,只能创建抽象类的子类,然后通过子类重写抽象类中的抽象方法。使用抽象类相当于多了一层编译器检查。

  在某些情况下,实际工作不应该由父类完成,而应该由子类完成。如果误用了父类,当父类是抽象类时,实例化时会报错。

  

1、抽象类的语法

 

  00-1010接口是一个公共的行为标准。实现的时候,只要符合标准,就可以通用。在Java中,一个接口可以看作是多个类的公共规范,是一种引用数据类型。使用关键字接口。

  公共接口名{//抽象方法公共抽象void method 1();//public abstract是固定搭配,可以不写public void method 2();抽象void方法3();void方法4();//注意:以上编写方法都是接口中的抽象方法。}[注意]

  创建接口时,通常用大写字母“I”来命名。接口和抽象方法的默认公共抽象成员变量默认为公共静态final。

  00-1010接口不能直接使用。它需要一个类来实现接口和接口中的所有抽象方法。

  类名公共类名实现接口名{

  //……

  }

  [注意]子类是从父类继承的,类是从接口实现的。

  00-1010接口中的类不能在接口中实现。它只能在实现接口的类中实现。不能使用new直接在接口中实例化实现的方法。使用default或static修改默认方法是接口的默认方法,您也可以在实现类中重写此方法。一个类可以实现一个接口,通过使用逗号,接口中可以没有构造函数和静态代码块。

  00-1010在Java中,类之间的关系是单一继承。一个子类只能有一个父类,也就是Java不支持多重继承。但是一个类可以实现多个接口。

  动物类{受保护的字符串名称;公共动物(字符串名){ this.name=name} }接口IFlying { void fly();}接口I running { void run();} interface is imming { void swim();}类Duck扩展动物实现IFlying、IRunning、is wimming { public Duck(String name){ super(name);}

   @Override public void fly() { System.out.println("Duck正在飞!"); } @Override public void run() { System.out.println("Duck正在跑!"); } @Override public void swim() { System.out.println("Duck正在游泳!"); }}【注】一个类可以实现多个接口,每个接口中的抽象方法都要实现。(使用ctrl+i快速实现接口)

  

 

  

5、接口间的继承

在Java中,类与类之间是单继承,一个类可以实现多个接口,接口与接口之间可以多继承。用接口可以达到多继承的的目的。

 

  

interface Animal extends IRunning,IFlying{ //……}

接口继承接口,达到复用的效果,使用关键字extends。

 

  

 

  

6、常用的接口

 

  

(1)Comparable接口

import java.util.Arrays;class Student implements Comparable{ private String name; private int age; public Student(String name,int age){ this.name=name; this.age=age; } @Override //重写toString方法 public String toString() { return "Student{" + "name=" + name +  + ", age=" + age + }; } @Override //重写Comparable中的compareTo方法 public int compareTo(Object o) { Student x=(Student)o; if(this.age>x.age){ return -1; }if(this.age<x.age){ return 1; }else{ return 0; } }}public class TestDemo { public static void main(String[] args) { Student[] students=new Student[3]; students[0]=new Student("zhangsan",18); students[1]=new Student("lisi",22); students[2]=new Student("liming",21); Arrays.sort(students); System.out.println(Arrays.toString(students)); }}

当我们对students进行排序时,编译器不能确定通过什么排序,此时会报错,需要重写Comparable接口中的compareTo方法。

 

  

 

  

(2)Cloneable接口

Object类中存在一个clone方法,掉哦用这个方法可以创建一个对象的拷贝。要想合法调用clone方法,必须先实现Cloneable接口。否则会抛出CloneNotSupportedException异常。

 

  

class Person implements Cloneable{ private String name; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name=" + name +  + }; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }}public class TestDemo1 { public static void main(String[] args) throws CloneNotSupportedException { Person person1=new Person("zhangsan"); Person person2=(Person)person1.clone(); }}

Cloneable为空接口。空接口:标记接口。证明当前类是可以被克隆的。此时克隆的对象提供了副本,修改其中的信息不会对原信息产生影响。Cloneable拷贝出的对象是一份浅拷贝。

 

  

 

  

三、Object类

Object类是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认继承Object父类。如果要打印对象中的内容,可以直接重写Object类中的toString方法。

 

  【注】使用Object可以接受所有类的对象

  对象比较equals()方法

  在Java中,==进行比较时:

  如果==左右两侧是基本类型变量,比较的是变量中的值是否相等如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同如果要比较对象中的内容,必须重写Object中的equals方法,因为equald方法默认也是按照地址比较的

//Object类中的equals方法public boolean equals(Object obj){ return (this==obj);//使用引用中的地址直接来比较}

【注】比较对象中内容是否相同时,一定要重写equals方法

 

  到此这篇关于Java 超详细讲解抽象类与接口的使用的文章就介绍到这了,更多相关Java 抽象类与接口内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: