方法的参数类型以及返回值
- 如果一个方法的形参跟返回值类型,需要一个类 类型,那么传入或者返回该类的对象
public class MyTest {
public static void main(String[] args) {
Student student = new Student();
show(student,"张三",18);
System.out.println(student.name);
System.out.println(student.age);
}
public static Student show(Student student,String name,int age){
student.name=name;
student.age=age;
return student;
}
}
class Student{
String name;
int age;
}
- 如果一个方法的形参跟返回值类型需要一个抽象类类型,那么传入或者返回该抽象类的子类对象
public class MyTest1 {
public static void main(String[] args) {
Cat cat = new Cat();
show(cat,"大橘",3);
System.out.println(cat.name);
System.out.println(cat.age);
}
public static Animal show(Cat cat, String name,int age){
cat.name=name;
cat.age=age;
return cat;
}
}
abstract class Animal{
String name;
int age;
public abstract void eat();
public abstract void sleep();
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃小鱼干");
}
@Override
public void sleep() {
System.out.println("猫睡觉");
}
}
- 如果一个方法的形参跟返回值需要一个接口类 类型,那么传入或者返回该接口的子类对象
public class MyTest2 {
public static void main(String[] args) {
A a= getInterface();
System.out.println(a.num);
}
public static A getInterface() {
return new B();
}
}
interface A {
public static final int num = 20;
public abstract void show();
}
class B implements A {
@Override
public void show() {
System.out.println("这是重写后的show方法");
}
}
权限修饰符
本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类) | |
---|---|---|---|---|
private(私有的) | Y | |||
默认的 | Y | Y | ||
protected(受保护的) | Y | Y | Y | |
public(公共的) | Y | Y | Y | Y |
内部类
概述: 把类定义在其他类的内部,这个类就被称为内部类
按位置分类:
- 成员内部类:在成员位置定义的类
public class Outer {
class Inner{
}
}
- 局部内部类:在局部位置定义的类
public class Outer {
public void show(){
class Inner{
}
}
}
局部内部类访问局部变量特点:
- 可以直接访问外部类的成员
- 可以创建内部类的对象,通过对象调用内部类方法,来使用局部内部类功能
- 局部内部类访问局部变量必须用final修饰(因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。)
public class Demo {
public static void main(String[] args) {
Outer outer = new Outer();
outer.show();
}
}
class Outer{
private int a=10;
public void show(){
int b=20;
class Inner{
public void method(){
System.out.println(a);
System.out.println(b);
}
}
Inner inner = new Inner();
inner.method();
}
}
匿名内部类
概述: 就是局部内部类的简写。
前提: 存在一个类或者一个接口,这里的类可以是具体的类也可以是抽象类
本质: 是继承了该类或者是实现了该接口的子类匿名对象
//实现抽象类的匿名对象
public class Demo {
public static void main(String[] args) {
new A() {
@Override
public void show() {
System.out.println("show方法");
}
}.show();
}
}
abstract class A{
public abstract void show();
}
//实现接口的匿名内部类
public class Demo{
public static void main(String[] args) {
new In() {
@Override
public void show() {
System.out.println("show方法");
}
}.show();
}
}
interface In{
public abstract void show();
}