Java学习笔记(五)包;接口与抽象类的区别

一、包

Java用包(package)将类组织起来。借助包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。并且可以解决名字空间、名字冲突

  • 它与类的继承没有关系,实际上一个子类和其父类可以位于不同的包内
  • 从编译器的角度来看,嵌套的包之间也没有任何关系。例如 java.util 包与 java,util.jar 包内毫无关系。每一个都拥有独立的类的集合

1.类的导入

一个类可以使用所属包的所有类,以及其他包的的公共类

包的导入用 import ,如导入 java.util 内的所有类

import java.util.*;
import java.util.ArrayList;
import static java.util.*;

导入包内具体的类能提高可读性。同时可以用static修饰导入此包内的所有静态成员。

2.将类放入包中

把一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。用 package 

package hello

若没有在源文件中放置package语句,这个源文件中的类就放置在一个默认包中(default package)默认包是一个没有名字的包。

 

二、接口

在 Java 中,接口不是类,而是对类的一组需求描述,是类的某种特征的约定。

接口的作用:

  1. 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。从而在一定意义上实现了多重继承。
  2. 通过接口可以指明多个类需要实现的方法。
  3. 通过接口可以了解对象的交互界面,而不需了解对象所对应的类。

1.接口的声明与定义

接口声明如:[public] interface interfaceName [extends listOfSuperInterface]{...}

  • public指明任意类均可使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。
  • extends 子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法

接口值进行方法的声明,而不提供方法的实现,所以,方法定义没有方法体,且用分号隔开,定义如下

public interface Actions {
	void study();        //等同于public abstract void study();
	void sayHello();
	String work(String workName);
}

定义的方法具有 public 和 abstract 属性,所以在定义的时候,这两个关键字可省略。

且若子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被重载。

2.接口的实现

在类的声明中用 implements 子句来表示一个类使用某个接口,在类体中使用中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口

import hello.Actions;

public class Student implements Actions
{
	private String name;
	
	Student(String name) 
	{
		this.name = name;
	}
	
	public void study()
	{
		System.out.println("I am studying");
	}
	
	public void sayHello()
	{
		System.out.println("Hello my name is "+this.name);
	}
	
	public String work(String workName)
	{
		return workName;
	}
	
}

3. 接口中的常量

在接口中的变量,只能是常量,具有public,static,final 属性,定义时可省去此些修饰符

4.接口一些特性

接口不是类,尤其不能使用new运算符实例化一个接口,但是却可以声明接口的变量,而接口变量必须引用实现了接口的类对象

Actions act;
act = new Student(String name);

三、抽象类和接口的区别

1.构造方法:抽象类可以有构造方法,但不能实例化,而接口是不能有构造方法

2.方法:抽象方法可以有public、protected和default这些修饰符,而接口方法默认是public,也只能是public

3.变量:抽象方法可以有私有变量,而接口里的变量默认是public、static、final的,即常量,也只能是常量

4.继承和实现:抽象类是用来天生继承的,而Java里只支持单继承,而接口是用来实现的,Java里可以实现多个接口,提供了多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。

5.运行速度:抽象类的运行速度比接口要一些,毕竟接口实现类里需要去查找所有的接口内的方法。

6.背后的逻辑:抽象类解决的问题是:“是不是”,而接口解决的问题是 “有没有”。即抽象类是对一种对象的高度抽象,比如有一个人的类,人要吃喝拉撒,而接口是对方法功能的抽象,比如一个如何吃的接口,一个如何喝的接口,一个如何...的接口,再用一个类去实现它,所以其背后的逻辑注重点不同,抽象类注重的是一类事物的抽象,而接口是对功能的规范(可能这就是为啥抽象类可以比较自由地定义字段,而接口里只能常量)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值