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 ...
随机推荐
- 站在DevOps肩膀上的TestOps(一)
一十一 发表于 2018-03-14 15:50:03 TestOps 摘要: DevOps团队的职责是“无摩擦发展”. 这是对“速度需求”驱动的发展理念的一种渴望,以及有意识地去除从概念到客户的 ...
- 网络安全之sql注入
1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQ ...
- csharp:SMO run sql script
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- demo:复制粘贴功能
复制链接功能,也是为了方便用户一键"复制",粘贴链接和文本到指定位置,在此,接着上一篇"demo:生成专属二维码link "来记录一键"复制" ...
- html中用href 实现点击链接弹出文件下载对话框
浏览器支持能够打开的格式,他都会默认直接在线打开(比如word或图片),不支持的格式,他就会弹出下载提示.最好是做成.rar格式.xlsx的文件.浏览器自带下载功能. <body> < ...
- 解决ie7,ie8下a链接无效问题
.person a{ display: block; position: absolute; width: 109px; height: 33px; bottom: 19px; right: 40px ...
- 浅谈Java多线程中的join方法
先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...
- 11.1、socket连接中的粘包、精确传输问题
粘包: 发生原因: 当调用send的时候,数据并不是即时发给客户端的.而是放到了系统的socket发送缓冲区里,等缓冲区满了.或者数据等待超时了,数据才会发送,所以有时候发送太快的话,前一份数据还没有 ...
- MSSQL一种取代游标的方案
今天看到一篇文章写的自己整理记录下,据说比用游标快. DECLARE @字段1 数据类型; DECLARE @字段2 数据类型; DECLARE @TMP_WHILE_ID INT; ,),TMP_W ...
- Docker搭建wordpress博客环境(Centos7)
Docker搭建wordpress博客环境(Centos7) 升级系统 yum -y update 设置docker库 sudo yum install -y yum-utils sudo yum-c ...