java面试必知必会-面向对象

目录

成员变量:

成员变量和局部变量的区别:

静态变量(static)和成员变量的区别:

this 关键字

static 关键字

final 关键字

abstract 关键字

接口类

抽象类与接口的区别

继承:


(不断更新)

成员变量

声明成员变量的语法如下

[public|protected|private] [static] [final] <type><variable_name>
  • public、protected、private:用于表示成员变量的访问权限。
  • static:表示该成员变量为类变量,也称为静态变量。
  • final:表示将该成员变量声明为常量,其值无法更改。
  • type:表示变量的类型。
  • variable_name:表示变量名称。

成员变量和局部变量的区别:

1. 在类中的位置不同

成员变量 类中方法外

局部变量 方法内或者方法声明上

2. 在内存中的位置不同

成员变量 堆内存

局部变量 栈内存

3. 生命周期不同

成员变量 随着对象的存在而存在,随着对象的消失而消失

局部变量 随着方法的调用而存在,随着方法的调用完毕而消失

4. 初始化值不同

成员变量 有默认的初始化值

局部变量 没有默认的初始化值,必须先定义,赋值,才能使用

静态变量(static)和成员变量的区别:

1. 所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
2. 内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
3. 内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
4. 调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用

this 关键字

this:代表所在类的对象引用(方法被哪个对象调用,this就代表那个对象)

1.this访问该类的另一个方法或属性

public class Baby{

   public void wakeUp(){
      System.out.println("宝宝醒啦");
   }

   public void eat(){
      // 使用this访问wakeup方法
      this.wakeUp();
      System.out.println("吃东西");
   }
}

2. this调用本类中的其他构造方法,调用时要放在构造方法的首行

3.. 当需要返回当前对象的引用时,就常常在方法写return this。

Java中this关键字使用小结 - zheting - 博客园

static关键字

可以修饰成员变量和成员方法

1. 随着类的加载而加载

2. 优先于对象存在

3. 被类的所有对象共享

4. 可以通过类名调用

static关键字注意事项:

在静态方法中是没有this关键字的

静态方法只能访问静态的成员变量和静态的成员方法

final关键字

可以修饰类,修饰成员变量,修饰成员方法
特点:
A:修饰类 类不能被继承
B:修饰成员变量 变量变成了常量
C:修饰成员方法 方法不能被重写
D:final的初始化时机
a:在定义时就赋值
b:在构造方法完毕前赋值

abstract 关键字

可以修饰类和方法,抽象类不一定有抽象方法,抽象方法的类一定是抽象类

抽象类不能实例化: 如何实例化?具体的子类实例化

接口

1. 接口用关键字interface表示  格式:interface 接口名 {}

2. 类实现接口用implements表示 格式:class 类名 implements 接口名 {}

3. 成员特点:
成员变量只能是常量,默认修饰符 public static final
没有构造方法,因为接口主要是扩展功能的,而没有具体存在
成员方法只能是抽象方法,默认修饰符 public abstract

4. 接口不能实例化,接口的子类要么是抽象类,要么重写接口中的所有抽象方法

抽象类与接口的区别

1. 成员区别
抽象类 变量,常量;有抽象方法;抽象方法,非抽象方法
接口 常量;抽象方法
2. 关系区别
类与类 继承,单继承
类与接口 实现,单实现,多实现
接口与接口 继承,单继承,多继承
3. 设计理念区别
抽象类 被继承体现的是:”is a”的关系。共性功能
接口 被实现体现的是:”like a”的关系。扩展功能

继承

(1)把多个类中相同的属性和行为提取出来,定义到一个类中,然后让这多个类和这一个类产生一个关系,这多个类就具备这一个类的属性和行为了。这种关系叫:继承。

(2)继承如何表示的呢?

格式:class 子类名 extends 父类名 {}

(3)java中的继承特点:

A:java中只能单继承

B:java中可以多层继承。(继承体系)

(4)java中的继承的好处和弊端

A:好处    

a:提高了代码的复用性

b:提高了代码的可维护性

c:让类与类之间产生了一个关系,是多态的前提

B:弊端

让类与类的耦合增强了。这样一个类的改动会直接影响另一个类。

设计原则:高内聚,低耦合。

(5)java中的继承的注意事项:

A:私有成员不能被继承

B:构造方法不能被继承,想访问,通过super关键字

C:不能为了部分功能而去使用继承

(6)继承中的成员关系:

A:成员变量

不同名:特别简单,一看就知道用的是谁。同名:就近原则

访问自己的用this,访问父亲的用super

B:构造方法

a:子类的所有构造方法默认都是访问父类的无参构造方法

b:如果父类没有无参构造方法,怎么办呢?

通过super(...)访问父类带参构造方法

通过this(...)访问本类其他构造方法。(一定要有一个访问了父类的构造方法)

注意:super或者this只能出现一个,并且只能在语句的第一条语句。

为什么?因为子类可能会访问父类的数据,所以,子类初始化之前,要把父类数据初始化完毕。

C:成员方法

就近原则

(7)this和super的区别及应用场景

A:区别

this:本类对象的引用

super:父类存储空间的标识。可以理解为父类对象的引用。

B:应用场景

a:成员变量

this.变量 本类的成员变量

super.变量 父类的成员变量

b:构造方法

this(...) 本类的构造方法

super(...) 父类的构造方法

c:成员方法

this.方法名(...) 本类的成员方法

super.方法名(...) 父类的成员方法

猜你喜欢

转载自blog.csdn.net/candice5566/article/details/125922025
今日推荐