面向对象(方法参数及返回值)
方法参数一级返回值类型
类名作为形式参数
当看到一个方法的形参要一个类 类型,就传递一个该类的对象。
抽象类名作为形式参数
当看到一个方法的形参要一个抽象类 类型的时候,就传递一个该抽象类的子类对象。
接口名作为形式参数
当看到一个方法的形参要一个接口 类型,就传递一个个该接口的子类对象。
类名作为返回值类型
当一个方法的返回值类型是一个类类型,就返回一个该类的对象
抽象类名作为返回值类型
当一个方法的返回值类型是一个抽象类类型,就返回一个该抽象类的对象
接口名作为返回值类型
当一个方法的返回值类型是一个抽象类类型,就返回一个该抽象类的子类对象。
package关键字
概述:相当于就是一个文件夹
作用:用来解决同一个路径下不能存在同名文件的问题。,也就是方便分类管理。
划分:
按照功能划分,
按照模块划分
定义包的注意事项
- package语句必须是程序的第一条可执行的代码
- package语句在一个java文件中只有一个
- 如果没有package,默认表示无包名
import关键字
也就是导包
概述:不同包下的类之间的访问,这样我们就不需要加包的全路径,java自动导包
格式:import 包名;
权限修饰符:
本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类) | |
---|---|---|---|---|
private | Y | |||
默认 | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
常见修饰符
权限修饰符:private ,默认的,protected,public
状态修饰符:static , final
抽象修饰符:abstract
修饰类的关键字:
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract
用的最多的就是:public
修饰成员变量的关键字:
权限修饰符:private,默认的,protected, public
状态修饰符:static final
用的最多的就是:private
修饰构造方法的关键字:
权限修饰符:private,默认的,protected, public
用的最多的就是public
修饰成员方法的关键字:
权限修饰符:private,默认的,protected, public
状态修饰符:static final
抽象修饰符:abstract
用的最多的就是:public
除此以外的组合规则:
成员变量:public static final
成员方法:public static
public abstract
public final
内部类
概述:把类定义到其他类的内部的类
将类A定义到类B中,那么这个类A就称为内部类,类B称为外部类
访问特点:
- 内部类可以直接访问外部类的成员,包括私有。
- 外部类要访问内部类的成员,必须创建对象。
内部类的分类:
按照内部类的位置分类:
在成员位置定义的类,被称为成员内部类,定义在类中方法外。
在局部位置定义的类,称为局部内部类。定义在类中方法内
在测试类直接访问内部类的成员:
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
创建内部类的对象:
new outer().new inner() 也就是new两层。
成员内部修饰符:
成员内部类的修饰符:
private 为了保证数据的安全性
static为了访问数据
注意事项:
- 静态内部类访问的外部类数据必须使用静态修饰。
- 成员方法可以是静态的也可以是非静态的。
成员内部类被静态修饰后的访问方式是:
格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
局部内部类
- 可以直接访问外部类的成员
- 可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能。
- 局部内部类访问局部变量必须用final修饰,因为局部变量会随着方法的调用完毕而消失,这个时候局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据能够继续被使用,就用final修饰,这样在堆内存里面存储的其实是一个常量值。在jdk1.8之后,final会默认加上不用自己手动加。
匿名内部类
就是局部内部类的简化写法。
前提:存在一个或者接口,这里的类可以是具体类,也可以是抽象类
格式:new 类名或接口名(){重写方法;}
本质其实就是一个继承该类或者实现了该接口的子类匿名对象。
匿名内部类其实就是一个子类匿名对象
package com.itheima.demo;
public class PersonTest {
public static void main(String[] args) {
//如何调用PersonDemo中的method方法呢?
new PersonDemo().method(new Person() {//格式:new 类名或接口名(){重写方法;}
@Override
public void show() {
}
});
}
}
package com.itheima.demo;
abstract class Person {
public abstract void show();
}
package com.itheima.demo;
class PersonDemo {
public void method(Person p) {
p.show();
}
}
package com.itheima.demo;
interface Inter {
void show();
}
class Outer {
public static Inter method() {
return new Inter() {//调用谁就返回谁。
@Override
public void show() {
System.out.println("hello word");
}
};
}
//补齐代码
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
类中定义接口
在一个类里面可以定义一个接口称为内部接口,内部接口可以私有,私有后外界就无法创建其子类对象。在外界可以采用内部类的方式,创建出内部接口的子类对象。
new aa.bb(){} bb是一个接口
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
### 类中定义接口
在一个类里面可以定义一个接口称为内部接口,内部接口可以私有,私有后外界就无法创建其子类对象。在外界可以采用内部类的方式,创建出内部接口的子类对象。
new aa.bb(){} bb是一个接口
本文地址:https://blog.csdn.net/qq_46466568/article/details/107585625