抽象类和接口

1.抽象类

抽象方法是只有方法签名,没有方法实现的方法。有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法。抽象方法和抽象类必须使用abstract修饰符来定义。

抽象类不能被实例化,抽象类可以包含方法(抽象和普通)、成员变量、构造器、初始化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。

public abstract class Shape {

{

System.out.println("执行Shape的初始化块");

}

private String color;

public abstract double calPerimeter();

public abstract String getType();

public Shape() {

}

public Shape(String color) {

System.out.println("执行Shape的构造器");

this.color = color;

}

set,get.....

}

-----------------------------------------------------------------------------

public class Triangle extends Shape {

public static void main(String[] args) {

Shape triangle = new Triangle("red", 1, 2, 2);

System.out.println(triangle.calPerimeter());

System.out.println(triangle.getType());

}

private double a;

private double b;

private double c;

public Triangle(String color, double a, double b, double c) {

super(color);

this.setSides(a,b,c);

}

public void setSides(double a,double b,double c){

if(a+b<=c||a+c<=b||b+c<=a){

System.out.println("三角形两边之和必须大于第三边");

return;

}

this.a = a;

this.b = b;

this.c = c;

}

@Override

public double calPerimeter() {

return a+b+c;

}

@Override

public String getType() {

return "三角形";

}

static abstract class test{

}

}

final和abstract不能同时使用,static和abstract不能同时使用(并不是绝对互斥,可以同时修饰内部类)。

抽象类避免了子类设计的随意性,抽象类体现的就是一种模板模式的设计。

2.Java 8改进的接口

抽象类是从多个类中抽象出来的模板,如果将这种抽象进行进行的更彻底,则可以提炼出一种更加特殊的“抽象类”-----接口。接口里不能包含普通方法,接口里所有的方法都是抽象方法。Java 8 以后,允许在接口中定义默认方法,默认方法可以提供方法实现。

接口体现的是规范和实现分离的设计哲学。

[修饰符] interface 接口名 extends 父接口1,父接口2...

{

零个到多个常量定义...

零个到多个抽象方法定义...

零个到多个内部类、接口、枚举定义...

零个到多个默认方法或类方法定义...

}

接口定义的是一种规范,因此接口里不能包含构造器和初始化代码块定义。接口里可以包含成员变量(只能是静态常量),方法(抽象、默认、类),内部类(包括内部接口、枚举)定义。

//系统自动为接口里定义的成员变量增加public static final修饰符

int MAX_SIZE=50;

public static final MAX_SIZE=50;

接口里的普通方法不管是否使用public abstract修饰符,系统自动为接口里定义的普通方法增加public abstract修饰符。

接口里定义的内部类、内部接口、内部枚举默认都采用public static修饰符。

public interface Output {

int MAX_CACHE_INT=50;

void out();

void getData(String msg);

default void print(String... msgs){

for(String msg:msgs){

System.out.println(msg);

}

}

default void test(){

System.out.println("默认的test()方法");

}

static String staticTest(){

return "接口里的类方法";

}

}

3.接口和抽象类

相同点:

接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。

接口和抽象类都可以包含抽象方法,实现接口或继承抽像类的普通子类必须实现这些抽象方法。

不同点:

接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则可以包含普通方法。

接口里只能定义静态常量;抽象类可以定义普通成员变量。

接口里不包含构造器,初始化块;抽象类包含。

4.内部类

内部类的作用:

提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

内部类成员可以直接访问外部类的私有数据。

匿名内部类适合用于创建那些仅需要一次使用的类。

内部类比外部类多使用三个修饰符:private、protected、static,非静态内部类不能拥有静态成员。

在Java 8之前,被局部内部类、匿名内部类访问的局部变量必须使用final修饰,Java 8以后不必,系统默认。

JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java把abcedf字符串进行排序_字符串合并处理 - 一贱书生的个人空间 - OSCHINA - 中文开源技术交流社区...

    题目描述 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串 ...

  2. java实现自举_实现语言的自举 - 沙枣的个人空间 - OSCHINA - 中文开源技术交流社区...

    几乎所有的语言项目,其核心都是用更底层的语言写的. 底层语言大部分是 C,C++,而扩展这门语言的核心,就要用另外一种语言 去写.这给语言设计者较大的挑战. 开发语言必须具备底层语言的编写能力,而为了 ...

  3. java开源写字板_简单的写字板 - 努力喵的个人空间 - OSCHINA - 中文开源技术交流社区...

    #include #include "acllib.h" void mouseListener(int x, int y, int button, int event) { sta ...

  4. java选择排序不稳定_选择排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...

    选择排序就这么简单 从上一篇已经讲解了冒泡排序了,本章主要讲解的是选择排序,希望大家看完能够理解并手写出选择排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出. 选择排序介绍和稳 ...

  5. JAVA刷CSDN访问量_刷csdn访问量 - 鹏城二少的个人空间 - OSCHINA - 中文开源技术交流社区...

    通过HttpURLConnection访问.只需改一下博客地址就行了,然后后台通过Jsoup解析博客的博客地址,然后通过多线程刷博客访问量(线程数量可根据自己电脑配置进行适当的修改 1.ListLin ...

  6. java萍方字体_苹方字体合集 - osc_flhsyn6i的个人空间 - OSCHINA - 中文开源技术交流社区...

    CSS font-family 中的苹方字体 苹方提供了六个字重,font-family 定义如下: 苹方-简 常规体 font-family: PingFangSC-Regular, sans-se ...

  7. java重载覆盖隐藏_重载,覆盖以及隐藏 - osc_4dki3x9l的个人空间 - OSCHINA - 中文开源技术交流社区...

    重载是指同名函数具有不同的参数表.在同一访问区域内声明的几个具有不同参数列表(参数的类型.个数.顺序不同)的同名函数,程序会根据不同的参数列来确定具体调用哪个函数.对于重载函数的调用,编译期间确定,是 ...

  8. 舞蹈链java实现_舞蹈链(DLX) - osc_kpp7htz3的个人空间 - OSCHINA - 中文开源技术交流社区...

    #舞蹈链(DLX) Tags:搜索 ##作业部落 ##评论地址 ##一.概述 特别特别感谢这位童鞋His blog 舞蹈链是一种优美的搜索,就像下面这样跳舞- 舞蹈链用于解决精确覆盖或者重复覆盖的问题 ...

  9. php 小程序 运动步数_小程序同步微信步数 - xiangqian1的个人空间 - OSCHINA - 中文开源技术交流社区...

    小程序获取微信运动步数,咱们看文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunDat ...

最新文章

  1. Xilinx ISE 调用 ModelSim SE 库编译
  2. magento更新产品状态报错
  3. 大华监控服务器显示感叹号灯亮,仪表盘出现黄色感叹号灯亮什么问题
  4. 关于VS2012连接MySql数据库时无法选择数据源
  5. JAVA水晶花数_我的世界Java版1.17快照20w45a新增物品详解
  6. 49. PHP 页面静态化(2)
  7. python 获取麦克风声音_python调用pyaudio使用麦克风录制wav声音文件的教程
  8. 图解通信原理与案例分析-18:低功耗、远距离物联网无线通信技术LoRa概述与扩频通信的基本原理
  9. Flash背景透明(透明背景)设置方法
  10. 可以免费测试的短信验证码接口接入
  11. Running Median
  12. 极速加密文件夹: 一个2秒加密文件夹的Windows文件夹加密软件
  13. python和工程造价_不会Python的将慢慢被淘汰!
  14. BZOJ 1189: [HNOI2007]紧急疏散evacuate|网络流|二分答案
  15. 京东首页之nav导航栏、banner广告部分、footer备案号
  16. Android 画中画(图片)
  17. 自然语言处理入门(5)——基于WordArt的AGM手机评论词频分析
  18. 崔毅东 C++程序设计入门(下) 第9单元:白公曾咏牡丹芳,一种鲜妍独“异常” 笔记
  19. php 查看nts,查看php是ts还是nts的方法
  20. 基于php013学生考勤管理系统

热门文章

  1. python培训学校-上海python培训学校
  2. 河北小学计算机教科书,河北省中小学教学用书有变
  3. 大厂小厂都在用的RAID软件磁盘阵列技术,必须学起来!
  4. bat 批处理 批量调整 srt 字幕文件时间
  5. Python入门--爬取淘宝评论并生成词云
  6. matlab susan,matlab练习程序(SUSAN检测)
  7. Android studio 生成JavaDoc文档
  8. java中ISO8601标准时间格式的转换
  9. 《原子习惯》读书分享
  10. android background