当前位置:网站首页 > Java基础 > 正文

基础java第四



1、继承的问题

子类是父类的一个扩展,子类可以利用父类的属性与行为,这种情况子类会破坏父类的封装

为了保持父类良好的封装性,设计父类有以下规则:

c01addd7413185d977b53c3c1f6a3296.png

8c2bad41d237f8de35f4717e7028744b.png

如果要把某类设计为最终类则需要添加final修饰符,或将此类的构造器声明为private

2、利用组合实现复用

组合就是把旧类的对象当做新类的属性嵌入,并用private修饰

public class Animals

{

public Animals()

{

System.out.println("Animals");

}

public void breathe()

{

System.out.println("ha-hu");

}

}

public class Wolf

{

private Animals a;

public Wolf(Animals a)

{

this.a=a;

}

public void run()

{

System.out.println("run");

}

public static void main(String[]args)

{

Animals b=new Animals();

Wolf a=new Wolf(b);

a.run();

}

}

3、初始化块

前面定义的初始化块先执行,后面的后执行

syntax:

[修饰符]{

//...

}

只能使用sattic修饰,称作静态初始化块

当创建一个对象是先调用初始化块

静态初始化块对整个类进行初始化

系统会首先执行静态初始化块,并会一直回溯到基类再一步一步执行静态初始化,再执行其他

4、基本数据类型的包装类

fb26738f73a4285d565f489e7c4da54b.png

为什么要用包装类?

解决8个基本类型变量不能变成Object类型变量的问题,为8个基本类型变量定义了应用类型的包装类。

517d6af20e4bf934e50fae2ab342556b.png

JDK1.5后提供了自动装箱与自动拆箱,就可以直接来了,不用这么复杂了

基本类型变量与字符串之间的转换关系

2f696ff86c3bf33b4cc1f1ee43c67b91.png

5、toString

toString 是Object 类定义的一个方法,用以描述对象的状态信息

返回值:对象类的实现类名+@+hashCode

可以依据实际情况重写toString

6、==与equals

==比较是一种基本类型的比较符,当要对引用类型进行比较时,比较的是是否指向同一个对象,不是值相等

要实现值相等的比较,就要重写equals

Object提供的equals与==是一样的,没有用的,一定要重写

重写后有规定:

1)自反性;

2)传递性;

3)对称性;

4)一致性。

Example:

public boolean equals(Object obj)

{

if(this==obj)

return true;

if(obj!=null&&obj.getClass()==SomeClass.class)

{

SomeClass sc=(SomeClass)obj;

if(compare)

return true;

}

return false;

}

7、类成员

类中只能包含属性、方法、构造器、初始化块、内部类、枚举类

static不修饰构造器

类成员不能访问实例成员

8、单例类Singleton

一个类只能创建一个实例

把构造器用private修饰

需要一个public方法作为这个类的访问点,同时要将其定义为static

该类还需缓存已创建的对象

class Singleton

{

//使用一个变量来缓存曾经创建的实例

private static 基础java第四 Singleton instance;

//隐藏构造器

private Singleton(){}

//提供一个静态方法,用于返回Singleton实例

//可加入自定义的控制,保证只产生一个Singleton

public static Singleton getInstance()

{

if(instance==null)

{

instance=new Singleton();

}

return instance;

}

}

9、final

final修饰的变量赋值后不可改变

final修饰的成员变量必须在类中赋初值

类属性:在静态初始化块中、在声明该属性时指定初始值

实例属性:在非静态初始化块、声明属性、构造器中指定初始值

系统不会对final修饰成员进行隐式初始化

final修饰的引用变量只是保证它所指向的地址不改变,而该引用的内容是可以改变的

final修饰的方法不可被重写,但可以重载

final修饰的类不可继承

10、不可变类

创建该类的实例后,实例的属性不可改变

8个包装类、java.lang.String都是不可变类

hashcode返回的是对象地址

final修饰的引用类型变量不符合不可变,那么我们在设计类的时候必须将此变量保护起来。

11、缓存实例的不可变类

如果程序需要经常使用某些实例,则应把其缓存

Example:

利用数组作为缓存池

public class CacheImmutale

{

private final String name;

private static CacheImmutale[]a=new CacheImmutale[10];

private static int pos=0;

public CacheImmutale(String name)

{

this.name=name;

}

public String getName()

{

return name;

}

//利用valueOf创建对象,而不用构造器

public static CacheImmutale valueOf(String name)

{

for(int i=0;i<10;i++)

{

if(a[i]!=null&&a[i].getName().equals(name))

return a[i];

}

if(pos==10)

{

a[0]=new CacheImmutale(name);

pos=1;

return a[0];

}

else

{

a[pos++]=new CacheImmutale(name);

return a[pos-1];

}

}

//重写equals

public boolean equals(Object obj)

{

if(obj instanceof CacheImmutale)

{

CacheImmutale aa=(CacheImmutale)obj;

if(name.equals(aa.getName()))

{

return true;

}

return false;

}

}

//重写hashCode

public int hashCode()

{

return name.hashCode();

}

}

12、抽象类

抽象方法与抽象类的规则:

e42261b637d55bbe4c841eff0e1d1293.png

利用抽象类就是利用一种模板模式

抽象父类中提供多个子类的通用方法,子类再进行具体的实现补充。

13、接口

接口中所有的方法都是抽象方法

接口规定类中应具体提供的方法,但不管具体实现

syntax:

[修饰符] interface Name extends 父接口1, 父接口2...

{

}

33b56f650a8dddb1160626b50c1e0ccf.png

接口中可以包含属性(只能是常量),方法(只能是抽象实例),内部类(包括内部接口)和枚举类的定义

只能是public 、static、final(系统默认)

方法、内部类、枚举类 自动用public static 修饰

83f9d447d901d6ceb3346004a5cfbba3.png

使用接口:

a3061346785c276a7ca11d84d01afb8c.png

类必须实现接口内的所有方法,只能用public

cb071d00d2b7b960139a43716e8e7dd7.png

模拟多继承

interface and abstract class

  • 上一篇: java基础学python
  • 下一篇: java基础学习python
  • 版权声明


    相关文章:

  • java基础学python2025-04-17 10:50:06
  • java基础网2025-04-17 10:50:06
  • java黑马基础班2025-04-17 10:50:06
  • java基础入门小说2025-04-17 10:50:06
  • java 是基础2025-04-17 10:50:06
  • java基础学习python2025-04-17 10:50:06
  • java 基础数据2025-04-17 10:50:06
  • java基础加深2025-04-17 10:50:06
  • java 基础 书2025-04-17 10:50:06
  • java程序基础架构2025-04-17 10:50:06