面向对象

本文深入探讨Java的面向对象编程特性,包括类与对象的关系、内存管理、方法重载与重写、构造方法、继承与多态、抽象类与接口的概念及应用,以及static、final关键字的使用技巧。

1.面向对象——分类思维模式

2.面向过程——步骤式解决问题,不易修改

3.宏观——面向对象 微观——面向过程

4.类与对象关系:类是对象的模板,对象是类的实例。

5.同个类的每个对象共享其方法

6Java除基本变量类型外的类型,都称为引用类型。

7内存分析

7.1.栈(先进后出,自动分配不连续的空间)

放置:局部变量(形参也是局部变量)

 

 

7.2.堆(

先进先出,不连续)

放置:new出来的对象

 

8.重载在于方法形参的个数,类型,排序的不同

8.1 只有返回值不同不构成方法的重载  。

8.2 返回值不同且形参的个数,类型,排序的不同构成方法重载  。

9.this关键字

用法

9.1处理方法中成员变量和参数重名的情况

9.2调用重载构造方法,避免相同的初始化代码,只能在构造方法(在类的普通函数中不能用this(参数)调用重载构造方法)中用,并且必须位于构造方法的第一句。

注意

9.3this不能用于static方法

9.4类中 “方法(类 this)” 中 “类 this()” 无意义,相当于 “方法()”。

10.static关键字,静态成员变量

10.1被类的所以实例共享(多个对象调用要排队调用),类载入是显示初始化(没创建对象时,就在内存空间了)

10.2可以通过 类名. 或 实例对象. 调用

10.3静态方法中不能访问非静态成员

10.4成员方法里不能定义静态变量

11.Java中只有单继承,接口可以多继承

12.Java修饰符限制范围(对类里的静态成员同样起作用)

12.1类名的限制修饰符只有,public,default (即缺省,什么也不写)。

12.3接口的限制修饰符只有(private)不能用,在类中写接口可以用protected

 

访问级别

访问控制修饰符

同类

同包

子类

不同的包

公开

public

受保护

protected

(继承)

默认

default

--

--

私有

private

--

--

--

13.方法重写

13.1 .在子类中可以根据需要对从基类中继承来的方法进行重写。

13.2重写方法不能使用比被重写方法更严格的访问权限。

13.2可调用重写的方法,也可调用父类没重写的方法不过要用super关键字。

14.super是指向父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

15.继承中的构造方法

15.1子类的构造方法中必须调用父类的构造方法

15.2子类可以在构造方法时用super调用父类的构造方法

(2)如果调用super,必须写在子类构造方法的第一行。

15.3如果子类的构造方法中没有显示调用基类的构造方法,则系统默认调用基类无参数的构造方法

15.4如果子类构造方法中既没有显式调用基类的构造方法,而基类(基类中定义了有参构造函数,但没自行添加无参构造函数)中又没有无参的构造方法,则编译器出错

15.4子类的普通方法用super调用父类方法,但不能调用父类构造方法

16. Object类是所有Java类的根基(父)类

16.1 Object类中定义有public String toString()方法

16.2Object类中定义有:public boolean equals(Object obj)方法

16.3如String,Date等类创建重写了equals方法,x.equals(y)只要x,,y两引用对象(可以是不同实例对象)同属一个类且属性值相等,即判断相等。

16.4String重写了toString方法的,直接输出它的值,而不是地址。

17.(扩展知识)System.out.println与System.err.println的区别https://blog.youkuaiyun.com/u014753393/article/details/49259215

18.1在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()方法

18.2+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会将另一个操作数(与18.1同理)转换成字符串再连接。

19.final修饰的变量(成员变量,局部变量)不能被改变。

19.1final修饰的方法不能被重写。

19.2 fianl修饰的类不能被继承

20.对象转型

20.1一个基类的引用变量可以指向其子类,可以将这个基类引用再强转成子类引用,

20.2满足20.1时,一个基类不可以访问子类特有的变量和成员。可以将这个基类引用再强转成子类引用,再访问。

20.3可以使用 引用变量 instanceof 类名 来判断该引用变量所指对象是否属于该类或该类的子类。

20.4子类对象可以当做基类(父类)的对象来使用,称为向上转型,反之称为向下转型。

20.5子类引用不能指向父类引用,但父类引用指向子类引用的可以用强转为子类引用再赋给子类引用(编译无错)

21.抽象类

21.1关键字为abstract

21.2含抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

21.3抽象类不能被实例化

21.4抽象方法只需要声明,不需要实现。

22.接口

22.1定义interface ;继承 implements

22.2特殊的抽象类,方法全为抽象方法。

22.3接口不能实例化,但可以声明引用变量类型

22.3接口中只能包含静态常量,和抽象方法。

22.4常量必然是public static final。不加这些修饰符也是这样。

22.5方法必然是public abstract。不加修饰符,也是这样。

22.6 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。

22.7接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。

22.8接口引用指向实现类对象,方便扩展(想增添或修改其他实现类对象,省代码,方便扩展)

23一个同时继承抽象类和接口的类,如果抽象类中抽象方法与接口中方法同名,类将无法实现这个同名方法

我在了解静态模块24静态块

回顾1章11.如果源文件有多个类,只能有一个类是public类;如果有一个类是public类,那么源文件的名字必须与这个类名字完全相同,如果没有public类,源文件的名字只要和某个类的名字相同。

public class E{

static{

System.out.println("我是E的静态块");

}

static void f(){

System.out.println("我是E中的静态函数");

}

public static void main(String[] args) {

A a=new A();

System.out.println("我在了解静态模块");

}

}

class A {

static {

System.out.println("我是A中的静态块");

}

static void f(){

System.out.println("我是A中的静态函数");

}

}

结果

我是E的静态块

我是A中的静态块

24以下代码共创建了几个对象?

String s1=new String("hello");

String s2=new String("hello");

String s3=s1;

String s4=s2;

 

[答案] 

2个  3个//()里的“hello”隐藏声明了个对象,new创建一个对象来存“hello”的地址,

=地址传给sl引用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值