新人小白福利!五一假期怒肝一天整理Java类,不简单不全你打我

703 阅读4分钟

上一篇是分享的是《Java接口》,这篇分享的是《Java类与类之间的关系、Java内部类》。

image.png

Java类与类之间的关系

image.png Java实现接口

一个类实现了接口

Java依赖

如果A类的中方法返回值类型,方法参数类型,局部变量类型使用了B类, 称A类依赖B类。

image.png Java关联

在A类中使用B类定义了成员变量, 称A类关联B类。

image.png Java聚合

聚合是关联的一种, 如果A类由若干的B类组成 , A类不能决定B类生命周期,称A类是聚合类。

image.png Java组合

组合是关联的一种, 如果A类由若干的B类组成 , A类能决定B类生命周期,称A类是组合类

image.png is a, A类 is a B类, 是一种继承关系 A类是B类的一种, B类是通用类, A类是特殊类, 也只有当两个类符合is a 关系时才可以使用继承。

like a, A类 like a 接口, 是一种实现关系。

has a , A类 has a B类, 是一种关联关系。

image.png

Java内部类

package com.wkcto.chapter01.innerclass.demo01;

/**

* 成员内部类

* 1) 成员内部类与实例变量/实例方法一样,都是属于某一个Outer对象的

* 2) 一般情况下, 在实例方法中使用成员内部类创建对象

* 3) 在Java中,所有类编译后都会生成一个独立的字节码文件,

* 内部类的字节码文件: 外部类$内部类名.class

*

*

*/

public class Outer {

int xx = 10 ; //实例变量

public void m1() {

System.out.println("实例方法");

xx = 123; //在实例方法中,可以直接使用实例变量

//一般情况下, 在实例方法中使用成员内部类创建对象

Inner1 obj = new Inner1();

}

//成员内部类

class Inner1{

}

}
package com.wkcto.chapter01.innerclass.demo02;

/**

* 静态内部类

* 1) 使用static修饰的成员 内部类

* 2) 静态内部类一般情况下是在静态方法中使用

*

*

*/

public class Outer {

static int yy = 20; //静态变量

public static void sm() {

System.out.println("静态方法");

yy = 202 ; //在静态方法中,可以直接使用静态变量

//一般情况下是在静态方法中使用静态内部类

Inner2 obj = new Inner2();

}

//静态内部类

static class Inner2{

}

}

package com.wkcto.chapter01.innerclass.demo03;

/**

* 局部内部类

* 1) 在方法体中定义的内部类就是局部内部类

* 2) 局部内部类的作用域 , 是从定义内部类的位置开始, 直到包含它的大括弧结束

*

*/

public class Outer {

public void m3() {

int zz = 10; //局部变量

class Inner3{} //局部内部类

}

}

package com.wkcto.chapter01.innerclass.demo04;

/**

* 匿名内部类

* 1)匿名内部类,就是没有类名 的内部类,

* 2)因为匿名内部类没有类名, 匿名内部类的定义与对象的创建必须在一起

* 3)给接口/抽象类的引用赋值时,可以赋值匿名内部类对象, 接口实现类/抽象类的子类只使用一次时, 可以使用匿名内部类

* 经常, 如果方法地形参是接口/抽象类的引用,在调用方法时,可以传递匿名内部类对象

*

*/

public class Test {

public static void main(String[] args) {

//接口的引用只能赋值实现类对象, 接口不能实例化对象, 需要先定义一个类, 让它实现接口,再创建实现类对象给接口引用赋值

//如果接口的实现类就使用这一次, 以后再也不用了, 就不需要再单独的定义一个实现类了, 可以直接给接口引用赋值匿名内部类对象

Flyable flyable = new Flyable() {

//在匿名内部类中重写接口的抽象方法

@Override

public void fly() {

System.out.println("我是匿名内部类中重写 的飞行操作");

}

};

flyable.fly();

//抽象类不能实例化对象, 抽象类的引用需要赋值子类对象, 先定义子类继承抽象类, 重写抽象类的抽象方法, 再创建子类对象给抽象类引用赋值

//当子类就使用这一次时, 可以直接给抽象类引用赋值匿名内部类对象

Animal animal = new Animal() {

//在匿名内部类中重写抽象类的抽象方法

@Override

public void walk() {

System.out.println(" 这是一个神奇的动物, 它没有腿也能走路");

}

};

animal.walk();

}

}

总结:

记住类与类之间的关系, 可以通过Rose工具画出类与类之间的关系。

了解什么是内部类, 了解内部类有哪些, 掌握接口的引用/抽象类的引用可以赋值匿名内部类对象。

  • 上面就是《Java类与类之间的关系、Java内部类》,的分享,接下来为大家梳理《Java异常简介与Java异常处理》。
  • 也欢迎大家交流探讨,该文章若有不正确的地方,希望大家多多包涵。
  • 你们的支持就是我最大的动力,如果对大家有帮忙给个赞哦~~~