写构造器习惯上先提供空参的
输出语句中的双单引号:输出用双引号 ,单引号是字符,会被当成加法。如't'(加上去)和"t"(空四格)
引用数据类型赋值赋的都是地址
一。内部类1.定义:Java中允许将一个类A声明在另一个类B中,A称为内部类,B称为外部类
2.为什么需要内部类?在定义一个类的属性时,往往就凭基本数据类型是无法完全表达某个属性的,这时需要定义一个类来补全此属性,但这个类就用这一次,于是将其直接定义在这个类内部,称为内部类
3.内部类的分类: 成员内部类(静态,非静态) vs 局部内部类(方法内,代码块内,构造器内)
4.成员内部类:
一方面,作为外部类的成员:
>调用外部类的结构
>可以被static修饰
>可以被4中不同的权限修饰
另一方面,作为一个类:
>类内可以定义属性,方法,构造器等;
>可以被final修饰,表示此类不能被继承。
>可以被abstract修饰
注意:
1.如何实例化成员内部类的对象?
外部类为Person 内部类为Dog(static),Bird(非static,其中有个方法名为display) //创建Dog实例(静态的成员内部类): Person.Dog dog = new Person.Dog(); dog.show(); //创建Bird实例(非static的成员内部类) Person p = new Person(); Person.Bird bird = p.new Bird(); bird.sing(); //错误的: Person.Bird bird = new Person.Bird(); //调用内部类的方法 bird.dispaly(“huangli”);
2.如何在成员内部类中区分调用外部类的结构
//非静态成员内部类
class Bird{
String name = "杜鹃";
public Bird(){
}
public void sing(){
System.out.println("我是一只小小鸟");
Person.this.eat();//调用外部类的非静态属性,就是Person类的这个对象的eat方法
//光是this.eat就成了鸟调用eat
eat();//调用外部类的方法
System.out.println(age);
}
public void display(String name){
System.out.println(name);//方法的形参
System.out.println(this.name);//内部类的属性
System.out.println(Person.this.name);//外部类的属性 人也有name这个属性
}
}
3.开发中内部类的使用
public class InnerClassTest1 {
//开发中很少见
public void method(){
//局部内部类
class AA{
}
}
//返回一个实现了Comparable接口的类的对象
public Comparable getComparable(){
//创建一个实现了Comparable接口的类:局部内部类
//方式一:
// class MyComparable implements Comparable{
//
// @Override
// public int compareTo(Object o) {
// return 0;
// }//有名实现类的匿名对象
//
// }
//
// return new MyComparable();
//方式二:
return new Comparable(){
@Override
public int compareTo(Object o) {
return 0;
}
};//匿名实现类的匿名对象
}
}



