流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:33,712 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之面向对象(接口、内存类)

Java l, xy 177℃ 0评论

  1.   接口

(1)      概念

1           接口是对抽象类的一种抽象

2           在设计层面:

1)         接口只要是对功能的扩展

2)         抽象类是对现实生活的不具体事物的一种抽象

3)         例如:飞机、鸟是现实生活中是完全不相关的两个事物,但是他们都具有飞的功能,所以就可以定义个飞的接口。对两个不相同事物的共同功能进行抽象。

(2)      好处

1           提高程序的扩展性和维护性

2           提供了同一的接口,规范代码

3           较低了代码之间的解耦性,让代码之间的耦合度更加松散。便于扩展

(3)      语法

1           【修饰符】 interface 接口名{

 

}

(4)      注意细节

1           接口可以多实现,更便于功能扩展

2           接口与接口之间是多继承关系

3           接口的的成员属性都是公共静态的常量(使用public static final 修饰,默认不写编译器会自动给加上)

4           Java8之前,接口中的方法都是公共抽象的(public abstract修饰,默认不写编译器hi自动给加上)

5           Java8之后新增了:(都可以有实现体)

1)         静态方法:使用静态修饰(public static 修饰)

2)         默认方法:使用default修饰(public default

6           Java8以后接口冲突解决方法

1)         类优先原则:当父类中和子类实现接口中有相同方法签名、返回值也相同的方法时,优先调用父类中的方法

2)         子类必须重新原则:当子类实现多个接口,多个接口中有相同的方法时(方法签名相同、返回值相同--可以是默认方法),则子类必须要重写以解决冲突

 

  1.   接口与抽象类的对比

 

定义

是否可以创建对象

成员属性

成员方法

构造器

继承/实现

接口

Interface

不可以

Public static final 修饰

Public abstract(抽象方法)

Public static(静态方法)

Public default(默认方法)

可以多实现

抽象类

Abstract class

不可以

和普通类相同

可以有抽象方法,也可以有普通方法

必须单继承

 

相同点:

  1.       都可以有抽象方法
  2.       都不能直接创建对象
  3.       在设计方法,都需要子类在实现抽象方法

 

  1.   内部类

(1)      概念

1           定义在一个类的内部的类称为内部类,包含内部内的类称为外部类。

2           内部类、外部类是一个相对的概念

(2)      好处

1           内部类可以直接访问外部内的成员(属性、方法),包含私有的

(3)      注意:

1           一个类中可以定义多个内部类

2           内部类中也可以定义内部类

(4)      分类(按照定义的位置)

1           成员位置

1)         实例成员内部类

  1. 修饰符:修饰成员的所有修饰符都可以(不能是静态,如果是静态就是静态成员内部类)
  2. 特点

a)         可以直接方法外部类的成员,因为内部类持有外部类的引用(外部类名.this

b)        访问原则

  1. 内部类--->外部类:直接访问
  2. 外部类--->内部类:创建内部类对象访问
  3. 其他类--->内部类:先创建外部类对象,在创建内部类对象访问

c)         重名:

  1. 当内部类中有成员变量与外部类中的成员变量重名时,默认调用的内部类属性(就近原则)
  2. 但是也可显示调用父类中的成员属性(外部类名.this.属性名)
  3. 如果是静态变量(外部类名.属性名)

d)        不可以定义静态变量和静态方法

 

2)         静态成员内部类

  1. 修饰符:必须使用static修饰
  2. 特点

a)         只能直接引用外部类的静态成员(非静态成员不可以访问,因为加载的时候,还没有加载外部类的非静态成员)

b)        访问原则

  1. 内部类--->外部类:直接访问(只能访问静态成员)
  2. 外部类--->内部类:创建内部类对象访问
  3. 其他类--->内部类:先创建外部类对象,在创建内部类对象访问

c)         重名:

  1. 当内部类中有成员变量与外部类中的成员变量重名时,默认调用的内部类属性(就近原则)
  2. 只能是静态变量(外部类名.属性名)

d)        可以定义静态变量和静态方法,也可以定义非静态成员。

 

2           局部位置(按照是否有引用)

1)         局部内部类

  1. 定义位置:

a)         一个类的局部位置

  1. 方法
  2. 代码块(构造代码块、静态代码块、if语句块....
  3. 构造方法
  1. 特点:

a)         如果定义在静态方法中,则只能访问外部类的静态成员

b)        如果定义在普通方法中,则可以访问所有成员

c)         外部类、其他类不能直接访问局部内部类

d)        重名:

  1. 内部类的成员方法和外部类的成员方法重名是,默认访问的时内部类的成员方法(就近原则)
  2. 也可以显示的调用外部类的成员
  3. 但是也可显示调用父类中的成员属性(外部类名.this.属性名)
  4. 如果是静态变量(外部类名.属性名)

e)         访问局部变量

  1. 局部内部类方法局部变量时,该变量必须是常量,但是在java8中进行了优化可以不显示使用final修饰。但也是常量,不能修饰
  2. 如果没有在局部内部类中访问,则局部变量依然是变量

2)         匿名内部类

  1. 位置:只能出现在局部的位置上
  2. 语法:

new 接口类名|父类名(【参数列表】){

//实现方法,同时也可以方法外部类成员,也可以自定义属性,方法等

}

  1. 特点:

a)         没有名称

b)        实际上匿名内部类new后面类型的实现类/子类

c)         没有构造方法

d)        同局部内部类

 

转载请注明:流年似水 » Java之面向对象(接口、内存类)

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址