1.abstract:可以修饰类和方法,被abstract修饰过的称为抽象类和抽象方法。

抽象类: 除了不可以创建对象, 其他和普通类一致。 可以有成员方法、静态方法和构造方法(提供给子类调用)等。

抽象方法: 含有抽象方法的类必须是抽象类, 但抽象类不一定有抽象方法; 抽象方法不允许有方法体,只能以分号结尾 , 即只做声明

 public abstract class Lianxi {
public abstract void print();
3 }

抽象方法必须被子类实现,如果子类不能实现父类的抽象方法,那么子类也必须是抽象类。

什么情况下使用:父类的名称比较抽象,创建对象无意义,如动物类;避免子类设计的随意性,严格限制子类的设计,使子类之间可以更加通用。

2.接口详解:使用interface修饰,是一种数据类型,引用数据类型。

如果一个类中所有的方法均为abstract方法,那么这个类就可以声明为接口

 public abstract class MyClass {
public abstract void print();
public abstract String fun();
public abstract void show();
}

可以改为如下代码;  包->右键->新建->interface(接口)

 public interface MyInterface {
void print();
String fun();
void show();
}

接口不是类,不可以定义构造方法

接口可以包含:抽象方法(可省略public abstract 默认是public的) 、非抽象方法(JDK1.8新特性 ,必须使用default关键字)、属性常量(public static final),public static final 可以省

略不写

 public interface MyInterface {
String name="张三";
public static final String name2="张三";//等同上一句
void show();
String fun();
int [] method();
/**JDK1.8新特性 ,必须使用default关键字*/
public default void method2(){ }
//接口中不允许定义构造方法
/* public MyInterface(){ }*/
}

3.接口与类的关系

(1) 类去实现接口中的抽象方法,实现关系 ,implements ,实现接口中的所有抽象方法

 public class InterfaceImpl implements MyInterface{

     @Override
public void show() {
// TODO Auto-generated method stub } @Override
public String fun() {
// TODO Auto-generated method stub
return null;
} @Override
public int[] method() {
// TODO Auto-generated method stub
return null;
} }

(2) 一个类存在继承关系,又存在实现关系?extends前?implements 前?

继承 →父子关系 →亲爹
实现 →实现关系-→干爹

extends 在前,implements 在后

 public class Stuent extends Person  implements Play{

(3) 如果父类与接口中有完全相同的方法(一模一样),子类/实现类所实现的方法是父类的?接口的?

父类优先于接口,子类实现的是父类中的方法

(4) 如果父类中与接口中有同名方法(只是名字相同,参数不同),对子类/实现类有什么要求呢?

父类与接口中的方法,在子类/实现类中构成方法的重载

4。接口的特征:传递性和继承性(多继承)

 public interface InterfaceA {
public void show();
}
interface InterfaceB { }
interface InterfaceC extends InterfaceB,InterfaceA{ }
class Impl implements InterfaceC{ @Override
public void show() {
// TODO Auto-generated method stub } }

5.使用接口的意义

可以实现设计和实现的分离,抽象出 N 多不同类的共同点。
举例:飞机,鸟,球,导弹,宇宙飞船……

继承:is –a 关系  三角形 is a 几何图形

鸟 is a 球? 不成立

接口 : has –a 关系 手机 has a 拍照的功能   飞机 has a 飞行的

接口体现的是一种能力

 public interface Fly {
public void flying();//飞行的能力
}
class AirPlane implements Fly{ @Override
public void flying() {
System.out.println("飞机在祖国的蓝天上自由飞翔...........");
} }
class Bird implements Fly{
@Override
public void flying() {
System.out.println("小鸟唱着动听的歌,在天空中飞................");
}
}
class FootBall implements Fly{
@Override
public void flying() {
System.out.println("球被踢了一脚,划了个美丽的弧线飞到了对方的球门里..........");
}
}
 public class Test {
public static void main(String[] args) {
//接口类型(引用数据类型)指向实现类的对象
Fly airPlane=new AirPlane();
Fly bird =new Bird();
Fly football=new FootBall();
//调用相同的方法
airPlane.flying();
bird.flying();
football.flying();
//运行结果,不相同 }
}

总结:使用接口实现多态的步骤
(1) 编写接口
(2) 实现类实现接口中的方法
(3) 接口(类型)new 实现类对象

java 面向对象抽象类和接口的更多相关文章

  1. java面向对象--抽象类和接口

    如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...

  2. Java面向对象—抽象类和接口

    本文引用海子的一篇文章:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法 ...

  3. Java面向对象---抽象类与接口

    final关键字 1.final关键字在java中被称为完结器,表示最终的意思: 2.final能声明类.方法.属性: 3.使用final声明的类不能被继承,使用final声明的方法不能被重写,使用f ...

  4. JAVA面向对象 - 抽象类、接口

    抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实 ...

  5. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  6. JAVA:抽象类VS接口

    JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...

  7. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  8. Java面向对象作业-用接口方式测试向下转型

    Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...

  9. Java面向对象之类、接口、多态

    Java面向对象之类.接口.多态 类 class Person { // 实例属性 int age; String name; // 类属性 static int v = 1; // 构造器 publ ...

随机推荐

  1. docker构建自定义镜像

    docker构建自定义镜像 要构建一个镜像,第一步准备所需要的文件,第二步编写Dockerfile文件,比如我现在构建一个java web镜像 第一步:准备java web工程的war包文件(这里假设 ...

  2. canvas-color的几种设置

    #ffff #642 = #664422 rgb(255,128,0) rgba(100,100,100,0.8) hsl(20,62%,28%) hsla(40,82%,33%,0.6) red

  3. python练习(-)

    简单的爬虫示例: import urllib.request #python2.x版本为urllib2url = 'http://www.douban.com/'webPage=urllib.requ ...

  4. mysql 优化配置参数(my.cnf)

    max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个参数设置的值, ...

  5. Android--很实用的图片工具类

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; imp ...

  6. JMeter—配置元件(七)

    参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第二节配置元件JMeter配置元件可以用来初始化默认值和变量,以便后续采样器使用.将在其作用域的初始化阶段处理. ...

  7. 将 Azure 文件共享用于 Windows VM

    可将 Azure 文件共享用作一种从 VM 中存储和访问文件的方式. 例如,你可以存储一个要与所有 VM 共享的脚本或应用程序配置文件. 本主题将介绍如何创建和装载 Azure 文件共享,以及如何上传 ...

  8. 使用 PsPing & PaPing 进行 TCP 端口连通性测试

    PsPing & PaPing 介绍 通常,我们测试数据包能否通过 IP 协议到达特定主机时,都习惯使用 ping 命令.工作时 ping 向目标主机发送一个 IMCP Echo 请求的数据包 ...

  9. android ninja【转】

    Android7.0 Ninja编译原理 引言 使在Android N的系统上,初次使用了Ninja的编译系统.对于Ninja,最初的印象是用在了Chromium open source code的编 ...

  10. apache 访问权限出错,apache selinux 权限问题, (13) Permission Denied

    今天在使用 httpd 做文件服务器的时候,发现 png 图像没有打开,但是原本www/html 文件夹内部的文件就可以打开.后来猜测是selinux 的问题,之前一直想写一篇关于selinux 的博 ...