1.抽象类的定义

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

2.简单实例

Shape类

package 抽象类;

/*

题目:

建立一个Shape抽象类,代表形状,求面积和周长两个方法

建立一个正方形类, 长方形 ,圆类 作为抽象类的子类,

通过抽象类来求面积和周长

*/

public abstract class Shape {

public abstract double getArea();//抽象方法

public abstract double getPan();

}

Square类

package 抽象类;

public class Square extends Shape{

protected double len;

Square(double len){

this.len = len;

}

public double getArea(){

return len*len;

}

public double getPan(){

return 4*len;

}

}

Circle类

public class Circle extends Shape{

private double r;

Circle (double r){

this.r = r;

}

public double getArea(){

return Math.PI*r*r;

}

public double getPan(){

return Math.PI*r*2;

}

}

Demo_Test2类

package 抽象类;

public class Demo_Test2 {

public static void main(String[] args) {

//求正方形的面积和周长

Square square = new Square(3);

double area = square.getArea();

double zc = square.getPan();

System.out.println("正方形的面积:"+area);

System.out.println("正方形的周长:"+zc);

}

}

3.总结:

1. 抽象类不能被实例化

2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

3. 抽象类中的抽象方法只是声明,不包含方法体。

4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

4.接口的概念

接口是只有全局常量和公共抽象方法的一种特殊类,由于在java中只能使用单继承的方式,所以增加接口类型,可以让类实现多个接口。

弥补单继承机制的不足。在接口中所有的常量都默认修饰public static final,所有的方法默认修饰public abstract(JDK1.8之前)。

补充:JDK1.8中对接口增加的特性:

(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;

(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

5.接口与抽象类的异同

相同点:(1)接口与抽象类都不能直接实例化.

不同点:(1)接口中的方法全部是抽象方法,抽象类中的方法不全是。

(2)一个类可以实现多个接口,但是一个子类只能继承一个父类。

(3)接口中的成员权限都是public,抽象类中不一定。

(4)接口强调特定功能的实现,而抽象类强调所属关系。

(5)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

(6)接口是对行为的抽象,抽象类是对一类事物的抽象。

6.简单示例

AnimalAction接口,代表动物行为

package 接口实例;

public interface AnimalAction {

//吃

void eat();

//public void eat();

//喝

void drink();

}

AnimalLove接口,代表动物的求偶方式

package 接口实例;

public interface AnimalLove {

//求偶方式

void LoveType();

}

AnimalSleep接口,代表动物的作息方式

package 接口实例;

public interface AnimalSleep {

//作息方式

String sleep();

}

Bird类

package 接口实例;

public class Bird implements AnimalAction,AnimalLove,AnimalSleep{

@Override

public String sleep() {

String string="我是鸟,白天觅食,晚上睡觉";

return string;

}

@Override

public void LoveType() {

System.out.println("我是鸟,求偶方式是修房子");

}

@Override

public void eat() {

System.out.println("我是鸟,喜欢吃虫子");

}

@Override

public void drink() {

System.out.println("我是鸟,喝水啄着喝");

}

}

View Code

Cat类

package 接口实例;

public class Cat implements AnimalAction,AnimalSleep,AnimalLove{

@Override

public void LoveType() {

System.out.println("我是猫,求偶方式是抓老鼠");

}

@Override

public String sleep() {

String string="我是猫,白天睡觉,晚上活动";

return string;

}

@Override

public void eat() {

System.out.println("我是猫,喜欢吃鱼");

}

@Override

public void drink() {

System.out.println("我是猫,喝水很斯文");

}

}

View Code

Test类,用于测试

package 接口实例;

public class Test {

//可以用接口创建的引用作为方法的形参

public void BuruAnimal(AnimalAction action)

{

if (action instanceof Cat) {

Cat cat1 = (Cat) action;

cat1.eat();

}

if (action instanceof Bird) {

Bird bird = (Bird)action;

bird.eat();

}

}

public static void main(String[] args) {

//向上转型,自动的

AnimalAction action = new Cat();

action.eat();

action.drink();

//The method sleep() is undefined for the type AnimalAction

//action.sleep();

action = new Bird();

action.eat();

action.drink();

//向下转型,强制转换的

Bird xBird = (Bird)action;

xBird.LoveType();

System.out.println(xBird.sleep());

}

}

运行结果:

参考文章:

标签:java,double,void,接口,action,抽象类,public

来源: https://www.cnblogs.com/YorkZhangYang/p/12741692.html

java中抽象类 接口_java中的抽象类与接口相关推荐

  1. java 内存接口_java中多态机制的内存解析、抽象类、接口

    1.多态机制的内存解析 1).多态的三要素 *类之间具有相互继承关系: *子类重写父类的方法: *父类引用指向子类对象: 2).为了更加细致深入的了解多态运行的机制,将下列代码的在内存中运行的简图绘制 ...

  2. java冒泡排序内外循环_java中的冒泡排序、for循环的嵌套使用以及接口与抽象类的区别。...

    一.java冒泡排序. java中的冒泡排序为一种简单的交换排序方法.其基本思路是从头开始扫描需要排序的元素,在扫描的过程中依次的对相邻的元素进行比较,将关键字值大的元素后移,每经过一趟排序后,关键值 ...

  3. java抽象的理解_Java中抽象类的理解

    Java中抽象类的理解 创建   所有   bsp   抽象类   member   初始   dem   print ---------------------------------------- ...

  4. java中的抽象方法_Java中的抽象类和抽象方法

    ###Java中的抽象方法和抽象类: abstract:关键字,可以用于修饰方法和类 抽象方法:不同类的方法是相似的,但是具体实现的内容又不太一样,没有具体的方法体. 抽象类:有抽象方法的类必须是抽象 ...

  5. java 抽象接口_JAVA中的“抽象接口”

    在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...

  6. java中如何定义接口_java中如何定义一个接口

    使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下:[修饰符] interface 接口名 [e ...

  7. java 匿名类 构造方法_Java中接口式的匿名内部类的构造方法

    在使用多线程的时候,时常会使用两种方式实现,一种是直接继承Thread类来实现多线程,另外一种就是实现Runnable接口. 我们都知道,接口是没有构造方法的,同时匿名内部类也是没有构造方法的.原因有 ...

  8. java接口中的抽象方法_Java中的接口与抽象方法

    Java中的接口与抽象方法 时间:2017-06-27     来源:华清远见JAVA学院 今天华清Java学院小编来和大家分享一下Java中接口和抽象方法的一些知识. Java中接口是什么? 什么是 ...

  9. java如何调c 的接口_JAVA中调用C语言接口

    写一个Java类,在这个类中包含了需要调用的本地方法的描述. //WinMsgBox.java package edu.netcom.jni; public class WinMsgBox  { st ...

最新文章

  1. 电击、警棍、爆头,被骗去柬埔寨的程序员有多惨?
  2. 如果需要,npm检查并更新包
  3. 如何使用Spring初始化程序创建Spring Boot项目
  4. 浙江大学计算机学院研究生论文盲审,浙江理工大学研究生学位论文盲审实施办法...
  5. Spring Boot 2 尝鲜-动态 Banner
  6. 腐蚀rust电脑分辨率调多少_腐蚀Rust画面怎么设置 _游侠网
  7. Java并发编程(三)什么是线程池
  8. CCNA零基础视频教程本人原创 下载地址
  9. linux用独显运行steam,修复在Linux系统上与Nvidia不兼容的Steam游戏
  10. 开源软件与自由软件的区别
  11. 网线转RS232如何接线
  12. flutter,快速获取ios设备的udid
  13. NoSQL Scylla Open Source 3.0食量比Cassandra大
  14. X86系统中EAX、ECX、EDX、EBX寄存器的作用
  15. 绘制几何图形,生成辅助线的思路
  16. 街霸 隆(Ryu)升龙拳(Syoryuken)动画(四)制作过程中几个版本动画比较一下
  17. 八百元八核的服务器?二手服务器(工作站)搭建指南(下)
  18. wsl1升级到 wsl2 后高cpu占用解决方案
  19. 让图片固定不动的两种方法
  20. 连花清瘟胶囊新冠应用 大健康医药·李喜贵:微量元素作用解密

热门文章

  1. MySQL更新时Error Code:1093和Error Code:1175的解决办法
  2. 修改MySQL字段为首字母大写
  3. Java线程总结(转)
  4. 各类双绞线标准、用法、接法速记
  5. java并发编程与线程安全
  6. [转载] 羽毛球——学打羽毛球 09 步法的基本概念
  7. (转)IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
  8. [转]另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]
  9. How to delete ASO files from Flash
  10. c#排序算法(待续)