1.接口(interface),接口被用来建立类与类之间关联的标准。
Java code
public interface ITest{
public void test();
}
public class TestImpl implements ITest{
public void test(){
System.out.println("test");
}
}
2.抽象类(abstract class),只要类中有一个抽象方法,此类就被标记为抽象类。实际上抽象类除了被继承之外没有任何意义。
区别
1.
接口是公开(public)的,里面不能有私有的方法或变量,是用于让别人使用的,实现接口的一定要实现接口里定义的所有方法。
而抽象类是可以有私有方法或私有变量的,实现抽象类可以有选择地重写需要用到的方法,但是必须实现里面所有的抽象方法。
2.
抽象类在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
但是,一个类却可以实现多个interface(java中实现多重继承的方法之一)。
3.
抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。
而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),而且所有的成员方法都是抽象的。
4.
抽象类和接口所反映出的设计理念不同。
其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。(组合是"has a"关系)
5.
接口中定义的变量默认是publicstatic final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值。
一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。不是很建议具体类直接实现接口的。还有一种设计模式是面向接口编程,而非面向实现编程。
其实接口是抽象类的延伸,可以将它看做是纯粹的抽象类,就是说接口比抽象类还抽象,还有设计接口的目的就是为了实现C++中的多重继承,不过java团队设计的一样更有趣的东西来实现这个功能,那就是内部类(inner class)。
内部类(inner class)
Java code
public class OuterClass{//外部类
private class InnerClass{}//内部类
}
一.定义
放在一个类的内部的类我们就叫内部类。
二.作用
1.内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承(这个特点非常重要,个人认为它是内部类存在的最大理由之一)
4.可以避免修改接口而实现同一个类中两种同名方法的调用
三.多重继承的实现
类一
Java code
public class Example1 {
public String getName() {
return"luffyke" ;
}
}
类二
Java code
public class Example2 {
public intgetAge()
{
return25 ;
}
}
类三
Java code
public class MainExample {
public class Test1 extends Example1 {
public String getName() {
return super.getName();
}
}
public class Test2 extends Example2 {
public int getAge() {
return super.getAge();
}
}
public String showName() {
return new Test1().getName();
}
public int showAge() {
return new Test2().getAge();
}
public static void main(String args[]) {
MainExample example = new MainExample();
System.out.println("姓名:" +example.showName());
System.out.println("年龄:" +example.showAge());
}
}
大家注意看类三,里面分别实现了两个内部类 Test1,和Test2 ,Test1类又继承了Example1,Test2继承了Example2,这样我们的类三MainExample就拥有了Example1和 Example2的方法和属性,也就间接地实现了多继承。
分享到:
相关推荐
接口与抽象类区别 在软件开发中,接口和抽象类是两个常用的概念,但它们之间的区别却让许多人感到困惑。那么,什么是抽象类和接口?它们之间有什么区别?下面,我们就来详细地探讨这个问题。 一、抽象类 抽象类是...
在编程世界中,接口、内部类和抽象类是面向对象设计的重要组成部分,它们各自具有独特的功能和用途。本文将深入探讨这些概念以及它们之间的区别。 首先,我们来了解**接口**。接口在Java中是一种完全抽象的类型,它...
课后作业中的问题涉及到抽象类、接口、内部类的特点和区别,异常处理机制以及关键字`this`、`super`、`final`的用法,包机制,访问权限修饰符,接口实现与类继承的区别等Java基础知识。实践题要求设计实现接口、ATM...
这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...
(5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性 (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了...
在Java的学习过程中,抽象类、接口以及内部类是三个非常关键的概念,它们对于理解和实现复杂的软件架构至关重要。这里我们将深入探讨这些概念。 首先,让我们来看看抽象类。在Java中,抽象类是一种不能被实例化的类...
在这个Java学习资料中,我们重点探讨抽象类、接口和内部类。 首先,抽象类是一种不能实例化的类,它主要用于被其他类继承。在Java中,使用`abstract`关键字来定义一个抽象类。抽象类可以包含抽象方法(无方法体的...
4. 抽象类可以包含受保护的成员,这对于子类之间共享内部状态非常有用,而接口的成员总是公共的,这限制了数据的封装。 在选择抽象类还是接口时,应考虑以下因素: 1. 是否需要提供默认实现?如果需要,抽象类可能...
在Java编程语言中,抽象类、接口和内部类是三个重要的概念,它们分别用于不同的设计需求。下面将详细解释这三个概念及其使用。 1. 抽象类(Abstract Class) 抽象类是不能直接实例化的类,它包含至少一个抽象方法。...
今天我们要探讨的是JAVA设计中的两个重要模式:抽象类与适配器模式。 首先,我们来理解一下“抽象”。抽象是面向对象编程的核心概念之一,它帮助我们处理对象的复杂性。在Java中,抽象通常通过抽象类来实现。抽象类...
本知识点将深入探讨面向对象编程中的三个重要概念:抽象类、接口以及内部类,并通过实例解析它们的使用和作用。 1. 抽象类(Abstract Class) 抽象类是不能被实例化的类,它用来作为其他类的基类,提供公共的属性...
抽象类与接口中方法的相同点和不同点 抽象类和接口是Java编程语言中两种基础的编程概念,它们都是用于实现多态性和继承性的重要工具。在这篇文章中,我们将详细讨论抽象类和接口中方法的相同点和不同点。 抽象类 ...
在编程领域,接口和抽象类是面向对象设计中两种重要的机制,它们用于定义类的行为和结构。虽然两者在某些方面有相似之处,但它们在概念、实现方式和用途上存在显著差异。 首先,抽象类是一种特殊的类,它不能被实例...
接口-与抽象类之区别 6.接口-应用示例(设计模式) 7.内部类-简介 8.内部类-作用 9.内部类-特殊语法规则 10.内部类-安全性 11.内部类-局部内部类 12.内部类-匿名内部类 13.内部类-...
### Java中抽象类和接口的区别与作用详解 #### 一、引言 在Java编程语言中,`abstract class`和`interface`是两种用于定义抽象类的重要机制。这两种机制不仅支持了Java的强大面向对象特性,而且也在实际开发过程中...
匿名内部类可以实现接口或继承抽象类,而且可以是抽象的,只要它满足不包含抽象方法的条件。 9. **Java标准库中的抽象类示例** - `java.util.List` 和 `java.util.Set` 是抽象类,它们提供了集合框架的基础结构,...
- 匿名内部类可以实现接口或继承抽象类,但它们自身不能包含抽象方法,否则必须声明为抽象的匿名类。 8. **Java集合框架与抽象类** - 在Java集合框架中,许多接口的实现类都基于抽象类,如ArrayList和LinkedList...
在设计抽象类时,应避免在其中定义公共或内部受保护的构造函数,而应提供受保护的或内部的构造函数供子类使用。同时,抽象类可以包含非抽象成员,这些成员提供了默认的实现,使得子类在某些情况下不必完全重写所有...
"抽象类与适配器模式"是其中的一种组合,它们在构建可扩展和灵活的系统时起着关键作用。本讲主要关注这两者的核心概念、应用场景以及如何在实际编程中运用它们。 首先,我们来探讨抽象类。抽象类是不能被实例化的类...