java中抽象类 接口_java中的抽象类与接口
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中的抽象类与接口相关推荐
- java 内存接口_java中多态机制的内存解析、抽象类、接口
1.多态机制的内存解析 1).多态的三要素 *类之间具有相互继承关系: *子类重写父类的方法: *父类引用指向子类对象: 2).为了更加细致深入的了解多态运行的机制,将下列代码的在内存中运行的简图绘制 ...
- java冒泡排序内外循环_java中的冒泡排序、for循环的嵌套使用以及接口与抽象类的区别。...
一.java冒泡排序. java中的冒泡排序为一种简单的交换排序方法.其基本思路是从头开始扫描需要排序的元素,在扫描的过程中依次的对相邻的元素进行比较,将关键字值大的元素后移,每经过一趟排序后,关键值 ...
- java抽象的理解_Java中抽象类的理解
Java中抽象类的理解 创建 所有 bsp 抽象类 member 初始 dem print ---------------------------------------- ...
- java中的抽象方法_Java中的抽象类和抽象方法
###Java中的抽象方法和抽象类: abstract:关键字,可以用于修饰方法和类 抽象方法:不同类的方法是相似的,但是具体实现的内容又不太一样,没有具体的方法体. 抽象类:有抽象方法的类必须是抽象 ...
- java 抽象接口_JAVA中的“抽象接口”
在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...
- java中如何定义接口_java中如何定义一个接口
使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下:[修饰符] interface 接口名 [e ...
- java 匿名类 构造方法_Java中接口式的匿名内部类的构造方法
在使用多线程的时候,时常会使用两种方式实现,一种是直接继承Thread类来实现多线程,另外一种就是实现Runnable接口. 我们都知道,接口是没有构造方法的,同时匿名内部类也是没有构造方法的.原因有 ...
- java接口中的抽象方法_Java中的接口与抽象方法
Java中的接口与抽象方法 时间:2017-06-27 来源:华清远见JAVA学院 今天华清Java学院小编来和大家分享一下Java中接口和抽象方法的一些知识. Java中接口是什么? 什么是 ...
- java如何调c 的接口_JAVA中调用C语言接口
写一个Java类,在这个类中包含了需要调用的本地方法的描述. //WinMsgBox.java package edu.netcom.jni; public class WinMsgBox { st ...
最新文章
- 电击、警棍、爆头,被骗去柬埔寨的程序员有多惨?
- 如果需要,npm检查并更新包
- 如何使用Spring初始化程序创建Spring Boot项目
- 浙江大学计算机学院研究生论文盲审,浙江理工大学研究生学位论文盲审实施办法...
- Spring Boot 2 尝鲜-动态 Banner
- 腐蚀rust电脑分辨率调多少_腐蚀Rust画面怎么设置 _游侠网
- Java并发编程(三)什么是线程池
- CCNA零基础视频教程本人原创 下载地址
- linux用独显运行steam,修复在Linux系统上与Nvidia不兼容的Steam游戏
- 开源软件与自由软件的区别
- 网线转RS232如何接线
- flutter,快速获取ios设备的udid
- NoSQL Scylla Open Source 3.0食量比Cassandra大
- X86系统中EAX、ECX、EDX、EBX寄存器的作用
- 绘制几何图形,生成辅助线的思路
- 街霸 隆(Ryu)升龙拳(Syoryuken)动画(四)制作过程中几个版本动画比较一下
- 八百元八核的服务器?二手服务器(工作站)搭建指南(下)
- wsl1升级到 wsl2 后高cpu占用解决方案
- 让图片固定不动的两种方法
- 连花清瘟胶囊新冠应用 大健康医药·李喜贵:微量元素作用解密
热门文章
- MySQL更新时Error Code:1093和Error Code:1175的解决办法
- 修改MySQL字段为首字母大写
- Java线程总结(转)
- 各类双绞线标准、用法、接法速记
- java并发编程与线程安全
- [转载] 羽毛球——学打羽毛球 09 步法的基本概念
- (转)IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
- [转]另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]
- How to delete ASO files from Flash
- c#排序算法(待续)