方法参数类型以及返回值类型问题
一个方法的形参要一个类 类型,就传一个该类的对象;
一个方法的形参要一个抽象类 类型,就传一个该抽象类的子类对象;
一个方法的形参要一个接口类型,传一个该接口的子类对象;
一个方法的返回值类型 是一个 类 类型,就返回该类的一个对象;
一个方法的返回值类型,要一个接口类型,就返回该接口的一个子类对象;
一个方法的返回值类型,要一个抽象类 类型,就返回一个该抽象类的子类对象;
链式编程
public class MyTest {
public static void main(String[] args) {
//链式编程
//Student student = new Student();
//Student student1 = student.getStudent(new Student(), 100);
//student1.show(109);
//链式编程:当你调用完一个方法之后,方法的返回值又是一个对象,那么你就可以紧接着打点再去
//调用对象的方法
Student student = new Student();
new Student().getStudent(student, 100).show(109);
System.out.println(student.num); //
}
}
class Student {
int num = 10;
public Student getStudent(Student stu, int num) {
stu.num = num;
return this;
}
public void show(int num) {
this.num = num;
}
}
package关键字
就是文件夹;
作用: 用来解决同一个路径下不能存在同名文件的问题(分类管理);
1.定义包的格式
package 包名;
多级包用.分开即可
2.定义包的注意事项
A:package语句必须是程序的第一条可执行的代码;
B:package语句在一个java文件中只能有一个;
C:如果没有package,默认表示无包名;
import关键字
1.导包
不同包下的类之间的访问,
2.导包格式
import 包名;
注意:这种方式导入是到类的名称。
四种权限修饰符
四种权限修饰符: private(私有的) , 默认 , protected(受保护的) , public(公共的)
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
内部类
把类定义在其他类的内部,这个类就被称为内部类。
访问特点
a:内部类可以直接访问外部类的成员,包括私有。
b:外部类要访问内部类的成员,必须创建对象。
1.按照内部类位置分类
成员位置:在成员位置定义的类,被称为成员内部类。
局部位置:在局部位置定义的类,被称为局部内部类。
2.成员内部类
如何在测试类中直接访问内部类的成员。
格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
3.成员内部类的修饰符:
private 为了保证数据的安全性;
static 为了方便访问数据;
注意事项: a:静态内部类访问的外部类数据必须用静态修饰;
b: 成员方法可以是静态的也可以是非静态的;
3.成员内部类被静态修饰后的访问方式是:
格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名();
4.局部内部类访问局部变量
A: 可以直接访问外部类的成员,包括私有
B: 可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
C:局部内部类访问局部变量必须用final修饰
public class MyTest {
public static void main(String[] args) {
//内部类:将一个类定义到,另一个类的内部,那么这个类,就叫做内部类
//举例:例如将 A类定义到B类里面,A类叫做内部类,B类叫做外部类
//根据定义的位置不同,分为成员内部类,和 局部内部类
// 成员内部类:这个内部类,在外部类的成员位置
// 局部内部类:将内部类,定义到外部类的方法中
}
}
class B {
//成员内部类
class A {
}
public void show() {
//局部内部类
class C {
}
}
}
注意:
内部类可以直接访问外部类的成员,包括私有;
外部类,想要访问内部类的成员,得创建内部类的对象;
内部类被静态修饰后,创建内部类的语法要改变;
静态内部类要访问外部类的成员只能访问静态的;
局部内部类,外界不能直接创建其对象;
匿名内部类
就是局部内部类的简化。
匿名内部类的写法:
AA a = new B();
a.show();
格式:
new 类名或者接口名() {
重写方法;
};
interface Inter {
public static final int a = 23 ;
}
public class Test {
public static void main(String[] args) {
new Inter() {
public void show() {
// 这个this表示的是匿名内部类的这个对象
System.out.println(this.a);
}
}.show();
}
}