关于JAVA中的抽象类和接口中常量和变量定义的原因

转载自https://my.oschina.net/cdzsc/blog/86107

在抽象类中,可以包含一个或多个抽象方法;但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”。

1. 为什么接口中只能定义static final:

    1.1 static(这时暂且认为是变量)解释:因为一个类可以实现多个接口,如果一个类同时实现了多个接口而每个接口中都定义了同一个变量的话就会产生在类中不知道是哪个接口中的变量了,所以必须定义成static的,每个接口拥有各自的这个变量。

1.2 final解释:因为一个接口可以被多个类实现,如果不定义成final的话每个实现了该接口的类都去改变这个变量就会产生错误,所以必须定义成final。

public interface SataHdd{
    //连接线的数量
    public static final int CONNECT_LINE=4;
    //写数据
    public void writeData(String data);
    //读数据
    public String readData();
}

注意:接口中声明的成员变量默认都是 public static final 的,必须显示的初始化。因而在常量声明时可以省略这些修饰符。

2. 为什么抽象类中可以定义变量:

因为每个类只能有一个父类,就不会产生上述的接口中的一些问题。

时间: 2024-11-10 12:58:28

关于JAVA中的抽象类和接口中常量和变量定义的原因的相关文章

Java语言中的----抽象类、接口

day12  Java语言中的抽象类与接口 一.抽象类和接口概述; 在昨天我们学习了Java的继承功能,这个是一个核心知识点,今天我们再继承的基础之上学习一下抽象类和接口这两个知识.什么是抽象类?如何定义一个抽象类?如何使用一个抽象类?这些都是我们需要掌握的. 同时我们还要知道如何来定义一个接口,在开发中定义接口来实现相关的功能是一个很重要的功能.如何来实现接口中的抽象方法,这些在这一节都会说到. 二.抽象类和接口 1.抽象类: 什么是抽象类?包含抽象方法的类就叫做抽象类 .使用abstract

java中抽象类与接口中方法访问修饰符问题 (

1.抽象类中的抽象方法(其前有abstract修饰)不能用private.static.synchronized.native访问修饰符修饰.原 因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰:static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽 象方法用static修饰没有意义:使用synchronized关键字是为该方法加一个锁..而如果该关键字修饰的方法是static方法.则使用的锁 就是class变量的锁.如果是修饰 类方法.则用this变量锁

C++--C++对象模型分析、c++中的抽象类和接口

一.C++对象模型分析 A.class是一种特殊的struct1.在内存中class依旧可以看作变量的合集2.在class域struct遵循相同的内存对齐规则3.class中的成员函数与成员变量是分开存放的--每个对象有独立的成员变量,所有对象共享类中的成员函数Q:class与struct的内存占用情况? #include <iostream> #include <string> using namespace std; class A { int i; int j; char c

【Java笔记】——抽象类和接口

现在开发的主流都是面向对象,面向过程几乎已经被淘汰了.理解面向对象,就要知道它的三大特性,多态继承和封装.在学习面向对象的过程中,总是会接触到抽象类和接口,涉及到继承和实现,而这两个概念又总是傻傻分不清楚.不过经过不懈努力,还是解决的差不多了.下面就来介绍下抽象类和接口: 抽象类 概念 用abstract关键字来修饰的类称为抽象类 特点 1.不是完整的类,只能作为基类 2.不能被实例化 3.有抽象方法的类必须声明为抽象类,而且该抽象方法必须被重写 举例 <span style="font-

java基础之抽象类与接口的区别

在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方,欢迎指正. 此处,借鉴了http://www.cnblogs.com/dolphin0520/p/3811437.html,写的很不错. 一.抽象类 使用了abstract关键字所修饰的类叫做抽象类.抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例). 抽象方法:使用abstrac

java中的抽象类与接口

抽象类: 用关键字abstract(位于class关键字之前的任何位置)修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象(实例). 对于关键字abstract---->可选修饰符(static.final.abstract)一般可以共存,但abstract与static.final都不能同时共存(理解其的真正含义) 抽象方法: 用abstract关键字所修饰的方法叫做抽象方法. 抽象方法必须定义在抽象类中. 抽象方法有声明,无实现(没有花括号{},有花括号但是内容为空也是

JAVA中的抽象类和接口

一 抽象类 抽象类就是不能被实例化的类,即不可以用new运算符创建本类的对象.在实际应用中,抽象类应该具有子类,且其子类一般不为抽象类. java中使用抽象类的原因有如下四点: 1.抽象类是较高层次的概括,其他的类可以继承它的抽象化特征: 2.抽象类包括它的所有子类共享的公共行为和公共属性,即抽象类中定义一些属性和方法,其他类继承该抽象类并实现这些属性和方法: 3.抽象类使编写程序更贴近人类的思维方式和客观世界: 4.在用户生成实例时强迫用户生成更具体的实例,保证代码的安全性. 二 接口 在接口

Java中抽象类和接口中均不能定义静态的抽象方法

1.Java抽象类中不能有静态的抽象方法. 抽象类是不能实例化的,即不能被分配内存:而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存.所以抽象类中不能有静态的抽象方法. 定义抽象方法的目的是重写此方法,但如果定义成静态方法就不能被重写. 2.接口中不能有静态的抽象方法 接口中的方法也只能是 public abstract修饰的,不能加上static.接口是不能实例化的,即不能被分配内存,而static修饰的方法

java中的抽象类和接口详解

1.抽象类 /** 1. 抽象方法一定存在于抽象类中,抽象方法和抽象类需要abstract修饰! 2. 抽象类不能实例化. 3. 如果抽象类中多个抽象方法,而其子类只继承了一个抽象方法,则该子类为抽象类,故也无法实力化. 4. 抽象类只能被子类覆盖其全部的抽象方法,才能建立子类对象! 5. 抽象类中可以有非抽象方法 */ //该子类未覆盖父类func1的抽象方法,故子类为抽象类,不能实例化.编译失败 abstract class Person{     abstract void func();