面向对象基础

**

面向对象

**

1.1 世界是有什么构成的?

只要能看见的东西都可以认为是一个具体的对象。

思考:你是如何认识新事物的?

从过往的见过的事物中总结特征和行为并上升为类的概念,通过类去认知新事物,对新事物进行归类。进而分析新事物的特性和行为。

1.2 类(Class)的概念

类是一组具有相同特征和行为的对象的抽象描述。

类描述的是抽象(抽出象的部分)概念,用于描述一个群体。

类就是现实生活中所说的”类型”

类的概念用于对新事物归类,用于在现实生活中认知新事物。但在程序中,类的作用是?

类在程序中用于快速的创建更多同类型的对象。

1.3 对象的概念

对象是类的一个具体实现,是客观存在的一个具体事物/实体。具有唯一性和独立性。

对象用于描述客观事物的一个实体,由一组特性和行为构成。

ð 客观存在的对象一定属于某个类型,且一定具备该类型的特性和行为。

类是抽象的,表示群体概念

对象是具体的,表示个体概念。

1.4 程序中的类和对象

1.4.1 属性(property/attribute)

类或者对象的特征称为属性.对象属性具备的值称为属性值。

同一类对象都具有相同的属性,但属性值一定不一样。

对象是数据的载体。

属性 field,或者叫成员变量

属性用于定义该类或该类对象包含的数据

属性作用范围是整个类体

在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

(数值:0,0.0 char:\u0000, boolean:false, 所有引用类型:null)

1.4.2 方法

类或者对象的行为称为方法.

同一类对象都具有相同的方法。

总结

类是一组具有相同属性和方法的对象的集合。

对象是用来描述客观事物的一个实体,由一组属性和方法构成

1.5 类的定义

定义类的语法

[修饰符] class 类名{

// 属性

// 方法

}

类中方法的定义语法

[修饰符] 返回值类型 方法名(形成列表){

//、、、

}

此时修饰符不需要static。

需求:定义一个学生类

public class Student{

// 属性

String sId;

String name;

int age;

char gender;

// 方法

public void sayHi(){

System.out.println(name + " say hello!");

}

public void learn(String cName){

System.out.println(name + " is learning " + cName);

}

}

类中包含两个成员,一个是成员变量也叫属性,有些地方也称为字段(field),一个是成员方法简称方法。

1.6 对象的初始化

1.6.1 实例化

类创建后,可以用于类来创建一个对象。语法

类型 对象 = new 类型();

public class Test01{

public static void main(String[] args){

// 创建一个对象

// 【1】s1是引用数据类型,其指向的内存在heap区

// 【2】通过Student实例化了一个对象s1

Student s1 = new Student();

// System.out.println(s1);

// 【3】.语法访问属性和方法

s1.name = “张三”;

s1.sId = “001”;

s1.age = 20;

s1.showInfo();

s1.sayHi();

s1.learn(“java”);

Student s2 = new Student();

System.out.println(s2);

}

}

总结

[1] 对象的属性和方法都通过.语法类访问。对象.xxx 或者 对象.xxx() 来调用。故此成员变量/属性也称为实例变量。s1称为Student的一个实例。实例就是对象,对象就是实例。

[2] 通过对象或者实例调用的方法称为实例方法。

1.6.2 对象的内存图

1.7 面向对象编程

在未来的软件开发过程中,需要完成很多功能,功能的完成需要方法完成,方法需要操作数据。

编程过程中需要一个逻辑体把数据和方法整合在一起。这个逻辑体就是对象。所以完成一个功能时,一定要先找到对应的对象。对象是由类产生的。类可用于把显示生活中的需求抽象成类,并实例化对象解决具体需求。这种思维方式就是面向对象思维,这个编程方法称为面向对象编程。

需求:用手机播放歌曲。

public class Test03{

public static void main(String[] args){

Phone phone = new Phone();

phone.brand = “Apple”;

phone.type = “iPhone x”;

phone.price = 5999.0f;

Music music = new Music();

music.name = “光年之外”;

music.author = “G.E.M”;

music.player = “G.E.M”;

music.lrc = “感受停在我发端的指尖\n”+

“如何瞬间冻结时间\n”+

“记住望着我坚定的双眼\n”+

“也许已经没有明天\n”+

“面对浩瀚的星海\n”+

“我们微小得像尘埃\n”;

phone.play(music);

}

}


类方法、构造方法、实例方法的区别


  1. 构造方法

    构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:
    

    方法名与类名相同;

    不要返回类型(例如return、void等);

    不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

     例如以下例子:
    

1.1. 默认构造方法

            默认构造方法时没有参数的构造方法,分为



                a.隐含的默认构造方法:public ClassName(){}



                b.程序显示定义默认构造方法:public Employee(){this("无名氏");}



            可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

1.2. 重载构造方法

            通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。







    1.3. 子类调用父类的构造方法



            父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:

用super调用父类的构造方法必须遵守以下规则:

                    1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;



                    2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句);



    1.4. 构造方法的作用域







当前类的其他构造方法通过this语句调用;

当前类的子类的构造方法通过super语句调用;

在程序中通过new语句调用。



    1.5. 构造方法的private访问级别







            构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。



            以下场合中,可以把类的所有构造方法声明为private:







这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。

禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。

类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。

Java中类的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有用static修饰,也叫非静态方法),这两种方法之间有什么区别呢?

一. 实例方法

当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失。

二. 类方法

当类的字节码文件加载到内存,类方法的入口地址就会分配完成,所以类方法不仅可以被该类的对象调用,也可以直接通过类名完成调用。类方法的入口地址只有程序退出时消失。

因为类方法的入口地址的分配要早于实例方法的入口地址分配时间,所有在定义类方法和实例方法是有以下规则需要遵循:

  1. 在类方法中不能引用实例变量

实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以在类方法中是不能引用实例变量的,因为这个时候实例变量还没有分配内存地址。

  1. 在类方法中不能使用super和this关键字

这是因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。

  1. 类方法中不能调用实例方法

原因同1。

与类方法相比,实例方法的定义就没有什么限制了:

  1. 实例方法可以引用类变量和实例变量

  2. 实例方法可以使用super和this关键字

  3. 实例方法中可以调用类方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值