文档章节

Java抽象类和接口

李茂冉
 李茂冉
发布于 2016/05/15 14:34
字数 660
阅读 5
收藏 0
点赞 2
评论 0

##抽象类(Abstract class)

  1. 可以禁止对象的创建,一般在上层类中使用较多(需要继承关系实现多态性的应用,但该类并没有真正的实际逻辑含义)
  2. 抽象类中可以定义属性和构造器,语法和普通类相同
  3. 抽象类中可以定义普通方法,语法和普通类相同
  4. 抽象类中可以定义抽象方法,一般用于没有内容的方法可以定义为抽象方法 语法: [修饰符]abstract 返回类型 方法名称(参数)[异常抛出]
  5. 抽象类中可以没有抽象方法;如果类中存在抽象方法,该类必须定义为抽象类
  6. 类从父类继承方法后,必须将所有抽象方法覆盖(对抽象方法的覆盖又称为实现),如果没有实现所有的抽象方法则该类必须也声明为抽象类

##类和接口之间的关系

  1. 类和类:extends关键字,单继承
  2. 类和接口:implements关键字,多重实现
  3. 接口和接口:extends关键字,多重继承

###语法:

interface 接口名 extends 接口1,接口2,...{... ...}

package com.md9;
/*
1、定义接口使用interface关键字,语法与定义类相同
2、接口中没有属性和构造器
3、定义属性会加入隐含修饰符public static final
4、不能创建接口的对象,也没有属性需要初始化,所以对于接口,构造器没有任何的作用
5、接口中的方法必须是抽象的,会加入隐含修饰符public abstract
*/
interface IShape{

	//String name="senven"; 公有静态常量
	void draw();
	void draw(String type);
}/*
类定义的完整语法
[修饰符] class 类名 [extends 父类] [implements 接口1,接口2,....]
实现特定的接口的类将获得在接口中定义的所有语法元素(常量和方法)
*/
class ICircle implements IShape
{	private String name;
	public ICircle(){}
	public ICircle(String name){
		this.name=name;
	}
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	public void draw(){
		System.out.println("draw a circle.");
	}
	public void draw(String type){
		if(type.equals("name"))
			System.out.println("draw a circle, name is"+name);
		else
			draw();
	}
}
/*
参照ICircle完成IRectangle
*/
class IRectangle implements IShape
{
	private String name;
	public IRectangle(){}
	public IRectangle(String name){
		this.name=name;
	}
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	public void draw(){
		System.out.println("draw a rectangle.");
	}
	public void draw(String type){
		if(type.equals("name"))
			System.out.println("draw a rectangle, name is"+name);
		else
			draw();
	}
};
/*
接口类型的引用可以指向实现该接口的类的对象
*/
public class IShapeTest {
    public static void draw(IShape s){
	s.draw();
    }
    public static void draw(IShape s,String type){
        s.draw(type);
    }
    public static void main(String[] args){
	IShape s=null;
	//s=new IShape();error
	ICircle c=new ICircle();
	draw(c);
	IRectangle r=new IRectangle("my rectangle use interface");
	draw(r,"name");
    }
}

© 著作权归作者所有

共有 人打赏支持
李茂冉
粉丝 5
博文 103
码字总数 59256
作品 0
东城
高级程序员
java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

接口和抽象类有什么区别?Java编程学习

  接口在JAVA语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。   接口并不是类,虽然编写接口的方式和类很相...

zhouzhou2018 ⋅ 05/25 ⋅ 0

Java面试2018常考题目汇总及答案带走不谢!

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等...

java高级架构牛人 ⋅ 06/14 ⋅ 0

java编程新手入门基础知识学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/15 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/28 ⋅ 0

2018年Java编程学习面试最全知识点总结

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/14 ⋅ 0

作为一个java程序员这些技能你都知道吗?

一、Java特点 1、 面向对象 尽管受到其前辈的影响,但Java没被设计成兼容其他语言源代码的程序。这允许Java开发组自由地从零开始。这样做的一个结果是,Java语言可以更直接、更易用、更实际的...

java高级架构牛人 ⋅ 05/23 ⋅ 0

java开发中的常用的设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...

qq_38024548 ⋅ 05/28 ⋅ 0

有一到五年开发经验的JAVA程序员需要掌握的知识与技能!

JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此...

java高级架构牛人 ⋅ 06/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部