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 ...
随机推荐
- docker构建自定义镜像
docker构建自定义镜像 要构建一个镜像,第一步准备所需要的文件,第二步编写Dockerfile文件,比如我现在构建一个java web镜像 第一步:准备java web工程的war包文件(这里假设 ...
- 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
- python练习(-)
简单的爬虫示例: import urllib.request #python2.x版本为urllib2url = 'http://www.douban.com/'webPage=urllib.requ ...
- mysql 优化配置参数(my.cnf)
max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个参数设置的值, ...
- Android--很实用的图片工具类
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; imp ...
- JMeter—配置元件(七)
参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第二节配置元件JMeter配置元件可以用来初始化默认值和变量,以便后续采样器使用.将在其作用域的初始化阶段处理. ...
- 将 Azure 文件共享用于 Windows VM
可将 Azure 文件共享用作一种从 VM 中存储和访问文件的方式. 例如,你可以存储一个要与所有 VM 共享的脚本或应用程序配置文件. 本主题将介绍如何创建和装载 Azure 文件共享,以及如何上传 ...
- 使用 PsPing & PaPing 进行 TCP 端口连通性测试
PsPing & PaPing 介绍 通常,我们测试数据包能否通过 IP 协议到达特定主机时,都习惯使用 ping 命令.工作时 ping 向目标主机发送一个 IMCP Echo 请求的数据包 ...
- android ninja【转】
Android7.0 Ninja编译原理 引言 使在Android N的系统上,初次使用了Ninja的编译系统.对于Ninja,最初的印象是用在了Chromium open source code的编 ...
- apache 访问权限出错,apache selinux 权限问题, (13) Permission Denied
今天在使用 httpd 做文件服务器的时候,发现 png 图像没有打开,但是原本www/html 文件夹内部的文件就可以打开.后来猜测是selinux 的问题,之前一直想写一篇关于selinux 的博 ...