java 面向对象抽象类和接口
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 面向对象抽象类和接口的更多相关文章
- java面向对象--抽象类和接口
如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...
- Java面向对象—抽象类和接口
本文引用海子的一篇文章:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法 ...
- Java面向对象---抽象类与接口
final关键字 1.final关键字在java中被称为完结器,表示最终的意思: 2.final能声明类.方法.属性: 3.使用final声明的类不能被继承,使用final声明的方法不能被重写,使用f ...
- JAVA面向对象 - 抽象类、接口
抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- JAVA:抽象类VS接口
JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...
- 关于JAVA中抽象类和接口的区别辨析
今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...
- Java面向对象作业-用接口方式测试向下转型
Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...
- Java面向对象之类、接口、多态
Java面向对象之类.接口.多态 类 class Person { // 实例属性 int age; String name; // 类属性 static int v = 1; // 构造器 publ ...
随机推荐
- 洛谷P4563 [JXOI2018]守卫(dp)
题意 题目链接 Sol 非常有意思的题目. 我们设\(f[l][r]\)表示区间\([l,r]\)的答案. 显然\(r\)位置一定有一个保镖 同时不难观察到一个性质:拿\([1, n]\)来说,设其观 ...
- odoo10源码win系统开发环境安装图文教程
前言 odoo10的源码安装教程不太完整或对新手不够友好,本新手再次整合出一份友好的新手教程(老鸟慎入) 准备工作 一个干净的window系统(事先没有其他python环境的系统)如果怕系统污染可以先 ...
- Android6.0源码下载编译刷入真机
编译环境是Ubuntu12.04.手机nexus 5,编译安卓6.0.1源码并烧录到真机. 源码用的是科大的镜像:http://mirrors.ustc.edu.cn/aosp-monthly/,下载 ...
- mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci
1.utf8与utf8mb4(utf8 most bytes 4) MySQL 5.5.3之后增加了utfmb4字符编码 支持BMP(Basic Multilingual Plane,基本多文种平面) ...
- SVN——Couldn't perform atomic initialization
前言 今天早上刚刚打开我的电脑,就被李总他们告知不能正确用SVN从服务器上下载代码了,然后看问题吧.问题其实也是本文的标题,并不难解决,写下来留个记录,顺便也算是一种分享.问题截图如下: 造 ...
- input输入的数据只允许整数和浮点型数据
//第一步:引入jquery //第二步:input输入框绑定该函数 例如:<input type="text" name="price" onInput ...
- js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- Activiti工作流与BPMN2.0规范
本章内容根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subp ...
- Java7/8 中 HashMap 和 ConcurrentHashMap的对比和分析
大家可能平时用HashMap比较多,相对于ConcurrentHashMap 来说并不是很熟悉.ConcurrentHashMap 是 JDK 1.5 添加的新集合,用来保证线程安全性,提升 Map ...
- 基础数据类型之AbstractStringBuilder
String内部是一个private final char value[]; 也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然.... 所以,对于可变字符序列的需求是很明确的 ...