Java面向对象

5fc6aacd28b24ca5a91291a926f825d3.jpg

一. java类及其类成员:

1.类的设计中,两个重要结构之一:属性      对比:属性 vs 局部变量

1.相同点:                                                  1.1 定义变量的格式:数据类型 变量名 = 变量值                                                              1.2 先声明,后使用                                    1.3 变量都其对应的作用域

2.不同点:                                                 2.1 在类中声明的位置的不同

属性:直接定义在类的一对{}内

局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.2 关于权限修饰符的不同

属性:可以在声明属性时,指明其权限,使用权限修饰符。

常用的权限修饰符:private、public、缺省、protected —>封装性

目前,大家声明属性时,都使用缺省就可以了。

局部变量:不可以使用权限修饰符。

2.3 默认初始化值的情况:

属性:类的属性,根据其类型,都默认初始化值。

整型(byte、short、int、long:0)

浮点型(float、double:0.0)

字符型(char:0 (或’\u0000’))

布尔型(boolean:false)

引用数据类型(类、数组、接口:null)

局部变量:没默认初始化值。

意味着,我们在调用局部变量之前,一定要显式赋值。

特别地:形参在调用时,我们赋值即可。

2.4 在内存中加载的位置:

属性:加载到堆空间中 (非static)

局部变量:加载到栈空间

 

2.类的设计中,两个重要结构之二:方法

方法:描述类应该具的功能。

1.举例:

public void eat(){}

public void sleep(int hour){}

public String getName(){}

public String getNation(String nation){}

2. 方法的声明:权限修饰符 返回值类型 方法名(形参列表){

方法体

}

3. 说明:

3.1 关于权限修饰符:默认方法的权限修饰符先都使用public

Java规定的4种权限修饰符:private、public、缺省、protected -->封装性再细说

3.2 返回值类型: 返回值 vs 没返回值      3.2.1 如果方法返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用 return关键字来返回指类型的变量或常量:“return 数据”。如果方法没返回值,则方法声明时,使用void来表示。

4.重写(Override)
方法的重写规则
父类的成员方法只能被它的子类重写。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
参数列表必须完全与被重写方法的相同。返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
声明为 final 的方法不能被重写。声明为 static 的方法不能被重写,但是能够被再次声明。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。构造方法不能被重写。如果不能继承一个方法,则不能重写这个方法。

5.重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

被重载的方法必须改变参数列表(参数个数或类型不一样);

被重载的方法可以改变返回类型;

被重载的方法可以改变访问修饰符;

被重载的方法可以声明新的或更广的检查异常;方法能够在同一个类中或者在一个子类中被重载。无法以返回值类型作为重载函数的区分标准。

6.总结
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

3.构造器(或构造方法):
构造器的作用:                                           1.创建对象
2.初始化对象的信息
使用说明:
1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器
2.定义构造器的格式:权限修饰符 类名(形参列表){}
3.一个类中定义的多个构造器,彼此构成重载
4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器
5.一个类中,至少会有一个构造器。

4.代码块:                                                      代码块分类:
在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为:
局部代码块、构造代码块、同步代码块、静态代码块。                                                      代码块初始化时机:                                    构造代码块在实例对象创建时进行初始化;静态代码块在类加载时进行初始化。
代码块执行顺序:                                       静态代码块 ==> main()方法 ==> 构造代码块 ==> 构造方法 ==> 局部代码块 。
继承中代码块执行顺序:                             父类静态块 ==> 子类静态块 ==> 父类代码块 ==> 父类构造器 ==> 子类代码块 ==> 子类构造器 。

5.内部类

Java 一个类中可以嵌套另外一个类,语法格式如下:
class OuterClass {   // 外部类
    // ...
    class NestedClass { // 嵌套类,或称为内部类
        // ...
    }
}
要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。

嵌套类有两种类型:
非静态内部类、静态内部类 
非静态内部类:
非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。
由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现。
私有的内部类。
内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符:
静态内部类:
静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问它。

二.三大特性(封装、继承、多态)

面向对象的特征一:封装与隐藏

1.为什么要引入封装性?

我们程序设计追求“高内聚,低耦合”。

高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;

低耦合 :仅对外暴露少量的方法用于使用。隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

2.封装性思想具体的代码体现:

体现一:将类的属性xxx私化(private),同时,提供公共的(public)方法来获取和设置此属性的值

体现二:不对外暴露的私有的方法

体现三:单例模式(将构造器私有化)

体现四:如果不希望类在包外被调用,可以将类设置为缺省的。

面向对象特征二:继承性

1.继承性的格式:
class A extends B{}

A:子类、派生类、subclass
B:父类、超类、基类、superclass
3.Java中继承性的说明

3.1.一个类可以被多个子类继承。

3.2.Java中类的单继承性:一个类只能有一个父类
3.3.子父类是相对的概念。
3.4.子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类
3.5.子类继承父类以后,就获取了直接父类以及所间接父类中声明的属性和方法


面向对象的特性三:多态性

1.多态性的理解:可以理解为一个事物的多种形态。

2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
举例:
Person p = new Man();
Object obj = new Date();

3.多态性的使用:虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译,看左边;运行,看右边。

4.多态性的使用前提:
① 类的继承关系 ② 方法的重写

三.关键字
关键字:this
1.可以调用的结构:属性、方法;构造器  2.this调用属性、方法:
this理解为:当前对象 或 当前正在创建的对象


关键字:abstract
abstract: 抽象的
1.可以用来修饰:类、方法
2.具体的:
abstract修饰类:抽象类

关键字super
在子类的构造方法中显式的调用父类构造方法
访问父类的成员方法和变量。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值