面向对象(二)


面向对象(二)

(1)自定义类并创建对象内存图

(2)学生类内存图


(3)面向对象开发,设计,特征

面向对象的开发过程实质是不断地创建对象,使用对象去做事情的过程。

设计的过程:其实就是在管理和维护对象之间的关系。

面向对象的特征

A:封装(encapsulation)

a:概念:是指隐藏对象的属性和具体实现细节,仅对外提供公共的访问方式。

b:封装的好处:

1:将变化隔离。

2:便于使用。

3:提高重用性。

4:提高安全性。

c:private关键字

1:用于修饰成员变量和成员方法。

2:被其修饰的内容在其他类中不能被访问。

3:常见应用

类中的所有成员变量私有,给出对应的set/get方法。

代码体现:

class Student

{

private String name;

private int age;

private Student(){}

private Student(String name,int age)

{

this.name = name;

this.age = age;

}

public void setName(String name)

{

this.name = name;

}

public String getName()

{

return name;

}

public void setAge(int age)

{

this.age = age;

}

public int getAge()

{

return age;

}


}

d:构造方法

1:格式及特点

格式:访问权限修饰符  类名(参数...){}

访问权限修饰符

public  private   

特点:

A:方法名和类名相同。

B:没有返回值类型。

C:没有具体的返回值。

注意事项:

(1)如果我们不给出构造方法,jvm会自动创建一个无参构造方法。

(2)如果我们给出了构造方法,jvm将不再提供无参构造方法

这时如果我们要使用无参构造方法,就需要我们自己创建

建议永远自己创建无参构造方法。

e:this关键字

(1)是一个关键字,代表当前类的引用。

通俗的理解:就是在方法中,那个对象调用方法,this就代表谁。

      (2)应用场景

解决局部变量隐藏成员变量的问题。

f:static关键字

(1)是一个关键字,修饰成员变量和成员方法。

(2)静态的特点

A:随着类的加载而加载。

B:优先于对象存在。

C:被类的所有对象共享。

D:可以通过类名调用。

(3)注意事项

A:在静态方法中,没有this关键字。

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

(4)静态内容的调用

A:用类名调用

B:用对象调用

推荐 用类名调用

(5)static的应用场景

如果某个内容被所有对象共享,就用static修饰。

如:

老师和学生

厕所和人

B:继承(inheritane)

(1)将多个类中的相同属性和行为进行抽取,封装到一个类中,然后建立新类的时候,就不需要从头做起,直接继承刚才定义的那个类即可。

继承的特点:
A:Java只支持单继承,不支持多继承。
为什么呢?因为如何可以多继承,就会出现调用不明确的问题。
B:Java支持多层(重)继承(继承体系)

什么时候把类的关系定义为继承呢?
由于继承体现了一种关系:is a的关系。xxx is yyy的一种。
以后,你在定义类(A,B)的时候:
如果他们有关系:A is a B 的一种。或者B is a A。
那么,他们之间就存在继承关系。前者A是子类,后者B是子类。

注意:不要为了获取部分功能,而去使用继承。

(2)好处:

A:提高代码的复用性

B:让类与类之间产生关系,是多态的前提

(3)super和this的区别

A:super是一个关键字,代表父类空间的标识。

B:它和this的用法相似
a:成员变量
this.变量-------本类的
super.变量-----父类的
b:构造方法
this(...)-------本类的
super(...)------父类的
c:成员方法
this.方法名()-------本类的
super.方法名()------父类的

(4)子父类中成员变量的用法:
A:名称不同,这个太简单了。

B:名称相同,子类对象的在使用的时候:


先找子类局部范围

再找子类成员范围

最后找父类成员范围

     (5)子父类中成员方法的用法:

A:名称不同,这个就不用说了。

B:名称相同,子类对象的在使用的时候:

先找子类的

再找父类的

C:方法重写

在子类中,方法声明(修饰符,返回值,方法名,参数列表)相同的情况。



注意事项:

a:父类中私有方法是不能被重写

b:子类方法的访问权限一定要大于等于父类的访问权限

c:静态只能重写静态。(这个不能算,因为静态跟类相关)

  (6) 子父类中构造方法的用法:

A:子类的初始化过程中,首先回去执行父类的初始化动作。
  因为子类的构造方法中默认有一个super()。
为什么?

A:子类的初始化过程中,首先回去执行父类的初始化动作。
  因为子类的构造方法中默认有一个super()。
为什么?

子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。
所以,子类的初始化过程中,会先执行父类的初始化。
B:如果父类没有无参构造方法
A:使用super调用父类的带参构造。
(推荐方式)
B:使用this调用本身的其他构造。

(7)代码块(面试题)
(1)执行顺序:
静态代码块 --> 构造代码块 --> 构造方法
(2)注意事项:
静态代码块只执行一次

(8)final(掌握)
(1)是一个关键字,可以用于修饰类,成员变量,成员方法。
(2)特点:
它修饰的类不能被继承。
它修饰的成员变量是一个常量。
它修饰的成员方法是不能被子类重写的。


C:多态(polymorphism)

(1)概念:对象在不同时刻表现出来的不同状态。
      举例:水(冰,水,水蒸气)
(2)多态的前提

A:要有继承或者实现关系。

B:要有方法的重写。

C:要有父类引用或者父接口引用指向子类对象。



注意:多态有三种体现形式

类多态

抽象类多态

接口多态

(3)多态中的成员特点:
A:成员变量
编译看左边,运行看左边。
B:成员方法
编译看边,运行看右边。

为什么这样做?
因为方法存在重写,而变量没有。

(4)多态的弊端:
父类(接口)引用不能使用子类特有功能。
为了解决这个弊端,我们需要向下转型。


Fu f = new Zi(); //向上转型

Zi z = (Zi)f; //向下转型

Zi z = new Zi();


(5)多态的好处:

可以提高代码的扩展性和可维护性



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值