JAVA(第三周)

面向对象概述:

面向对象程序设计(OOP),面向可以理解为找、拿,对象是东西。面向对象编程可以理解为:

找或拿东西来编程。

一、类和对象

1、类是构造对象的模板或蓝图。我们可以将类想象成制作小甜饼的模具,将对象想象成小饼干。

由类创建对象的过程称为创建类的实例。

2、类由属性和方法构成:

属性:相当于一个个的特征。

方法:相当于一个个行为。

3、创建对象:

类名称 对象名称 = new 类名称() ;

4、类的构造方法:它是用来初始化对象的;

构造方法是一种特殊的方法,在对象被创建时用来初始化对象,分为有参构造和无参构造。它的方

法名和类名一样;没有返回值类型;如果你没有定义任何构造方法,系统会有一个默认的无参构

造,但是如果你定义了一个构造方法,系统默认的就无效了,所以一般情况下我们都最少定义两个

构造方法。
5、this:代表当前所在类的对象,即本类对象,用于解决变量的命名冲突和不确定性问题;在没有

同名的情况下,可以直接使用属性的名字。

注意:一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类;所以一般情况我们

都是一个文件写一个类。

6、内存机制:

先是创建一个Car类,包含价格,名字和两个方法(这里省略了get、set和构造方法)。

再来一个测试类,它会先把Test类加载到方法区,然后虚拟机把main方法加载到栈内存,再执行

main方法的第一行代码,第一行会接触到Car类,会马上把Car类加载到方法区,然后才开始执行

第一行左边的代码,它会定义一个引用类型的变量c1(对象名),它会加载到栈内存,接着再执行

右边的代码,它会新建一个对象,把new出来的东西放在堆内存里,开辟一个空间,代表一个汽车

对象,对象里面又会开辟一些区域去放属性信息,但是由于没有赋值,它们都是默认值null和0.0,

它不会把对象的方法也放在堆内存中,而是加载到方法区,它会再堆内存中放方法的地址,称为引

用地址,最后把开辟空间的地址赋给c1,让c1指向这个对象。

再执行第二行,它会根据c1储存的地址找到对应的对象,再给name赋值,接着是第三行给price赋

值,往下走,再去访问c1对象的name和price;接着通过c1的地址去找对象,再通过方法的引用找

到start方法,run方法也是同样。

权限修饰符:


二、类的三个特点:

1、封装:

核心思想就是将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方

法来访问这些数据和方法,保证了数据的安全和程序的稳定。


2、继承:

(1)、子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。不

可以多继承但是可以多层继承。

在Java中,关键字“extends”表示继承,后面紧跟父类的类名,如下 :

public class Person {
    private String name;// 姓名
    private int age;// 年龄
    private String gender;// 性别
    //省略get和set方法
}
class Teacher extends Person {
    private double salary;// 工资
    private String department;// 部门
    //省略get和set方法
}
class Student extends Person {
    private double score;// 成绩
    private String grade;// 年级
    //省略get和set方法
}


(2)、final:

特点:
a、final用于修饰类、成员变量和成员方法。


b、final修饰的类,不能被继承,其中所有的方法都不能被重写。


c、final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法。


d、final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不

能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的

对象,但是对象当中的内容是允许改变的。

(3)、super和this:

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字:指向自己的引用。


3、多态:

(1) 、同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、

接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。

(2)、多态的定义与使用格式:

父类类型 变量名=new 子类类型();

(3)、多态的特点:

调用成员变量以及静态方法时,“编译看左边,运行看左边”。

三、抽象类

(1)、抽象类必须使用abstract关键字声明

一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

(2)、格式:

abstract class 类名{

 }

(3)抽象方法:

只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用

abstract关键字声明。

注意:abstract不能与final同时修饰一个类;因为abstract修饰的类必须要继承而final修饰的类不能

被继承。继承抽象类的类必须要重写所以抽象方法。

四、接口

(1)、Java是单继承的语言,利用接口可以模拟多继承;

(2)、接口是对抽象类的进一步抽象,是方法声明和常量的定义集合;

(3)、接口是一种行为规范,是一种契约;

定义:

修饰符 interface 接口名 {
}

使用:

修饰符 class 类名 implements 接口{

}

五、方法重写

(1)、@Override是放在重写后的方法上,作为重写是否正确的校验注解。

(2)、加上改注解后如果重写错误,编译阶段会出现错误提示。

(3)、建议重写都加上@Override注解,代码安全、美观!

方法重写的注意事项和要求:

a、方法重写也就是子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表)

b、从重写的要求上看:

        重写的方法和父类的要一致(包括返回值类型、方法名、参数列表)

        方法重写只存在于子类和父类之间,同一个类中只能是方法重载

c、从访问权限上看:

         子类方法不能缩小父类方法的访问权限

         子类方法不能抛出比父类方法更多的异常

         父类的私有方法不能被子类重写

d、从静态和非静态上看:

        父类的静态方法不能被子类重写为非静态方法

        子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(满足

重写约束)

       父类的非静态方法不能被子类重写为静态方法

e、从抽象和非抽象来看:

       父类的抽象方法可以被子类通过两种途径重写(即实现和重写)

       父类的非抽象方法可以被重写为抽象方法

六、静态变量和方法

定义:由static修饰的变量和方法称为静态变量和静态方法。

(1)、静态变量在类中的作用如下:

a、静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之

间的交互性。

b、如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而

节省内存空间。

(2)、静态方法的作用:

a、静态方法不需要通过它所属的类的任何实例就可以被调用,因此在静态方法中不能使用 this 关

键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态

方法。

b、类的静态变量和静态方法,在内存中只有一份,供该类的所有对象共用。

七、Object类

Object类是所有类的顶级父类,在Java体系中,所有类都是直接或间接的继承了Object类,Object

类包含了所有Java类的公共属性和方法,这些属性和方法在任何类中均可以直接使用,其中较为重

要的方法如下表所示:

方法名                                            功能说明

boolean equals(Object obj)    比较两个类变量所指向的是否为同一个对象,是则返true

Class getClass()                    获取当前对象所属类的信息,返回Class对象

String toString()                     将调用toString()方法的对象转换成字符串

Object clone()                        生成当前对象的一个备份,并返回这个副本

int hashCode()                       返回该对象的哈希代码值

注意:

a、继承是面向对象编程技术的基础,它允许创建分等级层次的类

b、任何类只能有一个父类,即Java只允许单继承

c、除构造方法,子类继承父类的所有方法和属性

d、overload(重载)是多态性的静态展示,override(重写)是多态性的动态展示

e、super有两种通用形式:调用父类的构造方法、用来访问被子类的成员覆盖的父类成员

f、final修饰符可应用于类、方法和变量

g、Object是所有类的最终父类,是Java类结构的基础

八、类型转换

(1)、子类转换成父类可以自动完成

(2)父类转化成子类需要强制类型转换;强制转换可能会丢失一些方法,此时只能调用父类的方

法,子类的方法无法调用。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值