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 ...
随机推荐
- Python全栈学习_day010作业
1,继续整理函数相关知识点,写博客. 2,写函数,接收n个数字,求这些参数数字的和.(动态传参)def MySum(*args): sum = 0 for i in range(len(args)): ...
- Oracle 11g即时客户端在windows下的配置
Oracle 11g即时客户端在windows下的配置 by:授客QQ:1033553122 instantclient-basic-nt-11.2.0.3.0.zip客户端压缩包为例 步骤 1. 假 ...
- 《Inside C#》笔记(八) 接口
接口可以认为是属于不同继承树的代码之间的行为约定.C#的接口相当于是一种特殊的抽象类,这种抽象类的内部只有虚方法. 一 接口的使用 a) 接口内部可以包含方法.属性.索引器和事件,这些成员都不在接口中 ...
- BeanFactory和ApplicationContext的比较
1.BeanFactory实例化后,不会马上实例化Bean:ApplicationContext在实例化后紧跟着就会实例化Bean 2.ApplicationContext还实现了ResourceLo ...
- Expo大作战(三十四)--expo sdk api之LinearGradient(线性渐变),KeepAwake(保持屏幕不休眠),IntentLauncherAndroid,Gyroscope,
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- mysql的高级特性-存储过程
定义: 存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCED ...
- wx python 基本控件
一.静态文本控件 wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, n ...
- bash shell下最方便的字符串大小写转换方法
用tr需要新增变量,用declare或typeset需要在变量赋值前或者赋值后单独声明,都有些麻烦 此方法为bash 4.0以后新增,bash 4.0 2009年发布 $ test="abc ...
- JavaWeb:jsp
本文内容: JSP的介绍 jsp的使用 EL表达式 JSTL的使用 首发日期:2018-06-18 JSP的介绍: JSP全称Java Server Pages. 与静态网页格式的html不同的是,j ...
- 减少MySQL主从延迟的神器--并行复制大揭密
1. 简介 MySQL 5.6引入了基于schema的并行复制,即如果binlog events操作的是不同schema的对象,不是DDL,且操作的对象没有对其他schema的foreign key关 ...