Java教程

Java程序设计-面向对象(二)

本文主要是介绍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 接口和抽象类的异同

  • 相同点:
    都是不断向上抽取而来的
  • 不同点:
    1. 抽象类需要被继承,而且只能被单继承,接口需要被实现,而且可以多实现
    2. 抽象类中可以定义抽象方法和非抽象方法,子类继承后可以直接使用抽象类中非抽象方法,接口中只能定义抽象方法,必须由子类去实现
    3. 抽象类的继承,是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 多态的特点
  1. 成员变量

    • 编译时:参考引用类型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败
    • 运行时:参考引用类型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量
    • 简单说:编译和运行都参考赋值符号的左边
  2. 成员方法(非静态的)

    • 编译时:参考引用类型变量所属的类中是否有调用的成员方法,有,编译通过,没有,编译失败
    • 运行时:参考对象所属的类中是否有调用的成员方法
    • 简单说:编译看左边,运行看右边

11.5 JavaBean

JavaBean指的是符合某种特定规范的Java类

11.5.1 JavaBean规范
  1. 所有的属性均为private
  2. 提供默认的构造器
  3. 提供getter和setter方法
  4. 实现serializable接口(序列化接口)

11.6 static关键字(静态的)

特点:

  1. static是一个修饰符,用于修饰成员
  2. static修饰的成员被该类的所有对象所共享
  3. static优先于对象而存在,因为static修饰的
    成员随着类的加载就已经存在了
  4. static修饰的成员多了一种调用方式,可以直接
    被类名调用,类名.静态成员
  5. static修饰的数据是共享数据,对象中存储的数据
    是特有数据

11.7 成员变量和静态变量的区别

  1. 两个变量的生命周期不同
    成员变量随着对象的创建而存在,随着对象被回收而释放,

    静态变量随着类的加载而存在,随着类的消失而消失

  2. 调用方式不同
    成员变量只能被对象调用
    静态变量可以被对象调用,还可以被类名调用

  3. 别名不同
    成员变量也叫作实例变量
    静态变量也叫作类变量

  4. 数据的存储位置不同
    成员变量数据存储在堆内存的对象中,所以也叫作对象的特有数据
    静态变量数据存储在方法区的静态方法区中(数据共享区),所以也叫作对象的共享数据

11.7.1 静态什么时候用
  1. 静态变量
    当分析对象中所具备的成员变量的值都是相同的,这时这个成员变量就可以被静态修饰,只要数据在对象中是不同的,那就是对象的特有数据,必须 存储在对象中,就不能定义成静态的

  2. 静态方法
    方法是否用静态修饰,就参考一点,该方法的功能是否有访问到对象中的特有数据,如果有,就不能定义成静态的,如果没有,就可以定义成静态的

  3. 静态代码块

    定义在类中
    static{

    }

  4. 构造代码块:定义在类中
    {}

这篇关于Java程序设计-面向对象(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!