Java程序设计-面向对象(二)
2021/12/4 17:19:54
本文主要是介绍Java程序设计-面向对象(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
11. 接口(interface)
-
class 类名{}
interface 接口名{}
接口中的成员修饰符都是固定的:
成员常量:public static final
成员方法:public abstract
-
类和类之间是继承(extends)关系,
类和接口之间是实现(implements)关系,
接口不可以被实例化,只能有实现了接口的子类并覆盖接口中所有的抽象方法后,该子类才可以实例化,否则这个子类
依旧是一个抽象类。接口的出现将"多继承"通过另外一种形式表现出来,即"多实现",一个类还可以在继承一个类的同时实现多个接口,避免单继承的局限性
11.1 接口的特点
-
接口是一个特殊的抽象类(纯抽象类)
-
接口是程序的功能扩展
-
接口的出现降低耦合性
耦合性:
也称为块间联系。指软件系统结构中各模块
间相互联系紧密程度的一种度量
内聚性:
也称为块内联系。指的是一个模块内部各个
元素彼此结合紧密程度的一种度量interface T{} class T1 implements T{} class T2 implements T{} say(T t){}
-
接口可以用来多实现
-
类与接口之间是实现关系,而且类可以在继承,一个类的同时实现多个接口
-
接口的属性默认是常量,而且是public static final修饰的
-
接口中的方法一定是public abstract修饰的(public abstract可以省略不写)
-
接口和接口之间可以有多继承关系
-
接口中没有构造器
11.2 接口和抽象类的异同
- 相同点:
都是不断向上抽取而来的 - 不同点:
- 抽象类需要被继承,而且只能被单继承,接口需要被实现,而且可以多实现
- 抽象类中可以定义抽象方法和非抽象方法,子类继承后可以直接使用抽象类中非抽象方法,接口中只能定义抽象方法,必须由子类去实现
- 抽象类的继承,是is a关系,在定义该体系的基本共性内容接口的实现,是like a关系,在定义该体系的额外功能
11.3 访问控制修饰符
修饰java类、属性、方法的访问可见范围)
修饰符(1表示可访问) | 类内 | 包内 | 子类 | 任意位置 |
---|---|---|---|---|
public | 1 | 1 | 1 | 1 |
protected | 1 | 1 | 1 | |
default | 1 | 1 | ||
private | 1 |
private:私有的,仅仅在类的内部可见
public:公有的,任意位置可见(类内部、
同一个包下、子类和其他地方)
protected:受保护的,在同一个包中和子类中可见
default:默认的,什么都不写,在同一个包中可见
final关键字(最终的)
final是一个修饰符,可以修饰类、方法、变量
final修饰的类不可以被继承(例如:String/Math/Integer...)
final修饰的方法不可以被覆盖(重写)
final修饰的变量是一个常量,只能赋值一次,如果尝试第二次修改值,那么会编译错误
成员变量一旦被final修饰之后就是固定不变,
是所有对象能共享的资源,所以一般都会加static
一起修饰
11.4 多态
方法的多态:方法的重载
对象的多态:父类型(父接口)的引用指向子类的对象
class Animal{} class Cat extends Animal{} Cat c = new Cat(); Animal a = new Cat();
11.4.1 转型的目的
向上转型的目的就是限制功能的使用,为了提高代码的扩展性(统一操作动物)。
向下转型的目的就是为了使用子类的特有功能
11.4.2 instanceof运算符
java中的instanceof是一个二元运算符,它的作用是用来判断instanceof左边的对象是否属于右边类的实例,返回一个boolean类型的结果
11.4.3 多态的特点
-
成员变量
- 编译时:参考引用类型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败
- 运行时:参考引用类型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量
- 简单说:编译和运行都参考赋值符号的左边
-
成员方法(非静态的)
- 编译时:参考引用类型变量所属的类中是否有调用的成员方法,有,编译通过,没有,编译失败
- 运行时:参考对象所属的类中是否有调用的成员方法
- 简单说:编译看左边,运行看右边
11.5 JavaBean
JavaBean指的是符合某种特定规范的Java类
11.5.1 JavaBean规范
- 所有的属性均为private
- 提供默认的构造器
- 提供getter和setter方法
- 实现serializable接口(序列化接口)
11.6 static关键字(静态的)
特点:
- static是一个修饰符,用于修饰成员
- static修饰的成员被该类的所有对象所共享
- static优先于对象而存在,因为static修饰的
成员随着类的加载就已经存在了 - static修饰的成员多了一种调用方式,可以直接
被类名调用,类名.静态成员 - static修饰的数据是共享数据,对象中存储的数据
是特有数据
11.7 成员变量和静态变量的区别
-
两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放,静态变量随着类的加载而存在,随着类的消失而消失
-
调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用,还可以被类名调用 -
别名不同
成员变量也叫作实例变量
静态变量也叫作类变量 -
数据的存储位置不同
成员变量数据存储在堆内存的对象中,所以也叫作对象的特有数据
静态变量数据存储在方法区的静态方法区中(数据共享区),所以也叫作对象的共享数据
11.7.1 静态什么时候用
-
静态变量
当分析对象中所具备的成员变量的值都是相同的,这时这个成员变量就可以被静态修饰,只要数据在对象中是不同的,那就是对象的特有数据,必须 存储在对象中,就不能定义成静态的 -
静态方法
方法是否用静态修饰,就参考一点,该方法的功能是否有访问到对象中的特有数据,如果有,就不能定义成静态的,如果没有,就可以定义成静态的 -
静态代码块
定义在类中
static{}
-
构造代码块:定义在类中
{}
这篇关于Java程序设计-面向对象(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程