类 抽象类 接口 访问控制符
来源:互联网 发布:网易popo mac 编辑:程序博客网 时间:2024/06/05 19:36
类 抽象类 接口
类
一个类可以包含以下任意变量类型
局部变量: 方法里面,构造函数或块中定义的变量称为局部变量。该变量将被声明和初始化的方法中,当该方法完成该变量将被销毁。
实例变量: 实例变量都在一个类,但任何方法之外的变量。这些变量在类被加载的实例化。实例变量可以从内部的任何方法,构造函数或特定类别的块访问。
类变量: 类变量是在一个类中声明,任何方法之外的变量,用static关键字。
访问控制修饰符
默认的,也称为 default,在同一包内可见,不使用任何修饰符。 私有的,以 private 修饰符指定,在同一类内可见。 共有的,以 public 修饰符指定,对所有类可见。 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。
构造函数
每个类都有一个构造函数。如果我们不明确地写一个构造函数的类,Java编译器生成一个默认构造函数的类。创建一个新的对象中的每个时间,至少有一个构造函数将被调用。构造函数的主要规则是,他们应该具有相同的名称作为类。一个类可以有多个构造函数。
拷贝构造函数
在Java中没有复制构造函数。但是可以将一个对象的值复制到另一个中,就像C++中的复制构造函数。
在java中有很多方法可以将一个对象的值复制到另一个对象中。它们分别是:
1.通过构造函数2.通过将一个对象的值分配给另一个对象3.通过Object类的clone()方法
继承时构造器
子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
源文件声明规则
正如本节的最后部分现在让我们看看到源文件中声明的规则。声明类,import语句和包声明在源文件时,这些规则是必不可少的。
只能有一个有public类在每一个源文件。
源文件可以有多个非公共类。
公共类名应该是源文件,以及应当由 .java 在末尾附加的名称。例如:类名是 public class Employee{} 将源文件应为 Employee.java。
如果类在包中定义,那么 package 语句应该是在源文件中的第一条语句。
如果 import 语句都存在,那么它们必须写 package 语句和类声明之间。如果没有包(package)语句,那么import语句应该是源文件中的第一行。
导入和包语句将意味着对所有现有的源文件中的类。不可能的声明不同的 import和/或包语句不同类的源文件中。
1.抽象类
抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
抽象类和普通类的主要有三点区别:
1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2. 抽象类不能用来创建对象;
3. 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
在其他方面,抽象类和普通的类并没有区别。它和普通类一样,同样可以拥有成员变量和普通的成员方
2.接口
interface 声明接口
接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数,它是对行为的抽象。
接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
接口中不能包含实例域或静态方法。
接口与接口之间可以是继承关系,而且可以实现多继承。在接口的多重继承中extends关键字只需要使用一次,在其后跟着继承接口
class ClassName implements Interface1,Interface2,[....]{ }
非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
接口回调
以接口声明变量
1.接口和抽象类的区别
1.语法层面上的区别
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2.设计层面上的区别
1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 “是不是”的关系,而 接口 实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
接口与类相似点:
- 一个接口可以有多个方法。
- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
- 接口的字节码文件保存在 .class 结尾的文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多重继承。
抽象类与接口的对比
public
YYYYprotected
YYYNdefault
YYNNprivate
YNNN- 类 抽象类 接口 访问控制符
- 抽象类 | 接口 | 包 | 访问控制
- C#成员访问和抽象类与接口
- 接口、抽象类、抽象方法
- 抽象接口和抽象类
- Day10—继承、访问控制符、final关键字、对象创建过程、多态、抽象类
- java中抽象类与接口中方法访问修饰符问题
- java中抽象类与接口中方法访问修饰符问题
- java中成员访问修饰符,接口与抽象类相关知识
- java中抽象类与接口中方法访问修饰符问题
- java中抽象类与接口中方法访问修饰符问题
- java中抽象类与接口中方法访问修饰符问题
- 类 抽象类 接口
- 抽象类接口类
- 类、抽象类、接口
- 类、抽象类、接口
- 类、抽象类,接口
- 接口和抽象类
- WebStorm 简单部署服务器进行测试操作
- 列表li排序去重的实现与优化
- 第三章 授权
- CentOS apache升级
- CentOS 7 开放防火墙端口命令
- 类 抽象类 接口 访问控制符
- java 四种数组排序方法
- Git常用命令
- 二级联动下拉单
- Python爬虫学习笔记Day3
- 换钱的方法数
- Android 常用三方网络及图片框架知识对比
- 关于使用bat执行jar包
- linux 技巧:使用 screen 管理你的远程会话