发表于: 2017-12-01 19:35:13
2 865
今天完成的事情:
1.学习java中的内部类
定义:定义在一个类里面的类
作用:(1)提供更好的封装,不允许同一个包中其他类访问该类
(2)内部类可以直接访问外部类的所有数据,包括私有数据
内部类的类型:
成员内部类、静态内部类、方法内部类、匿名内部类
实战: 注意事项如代码所示:
public class HelloWorld {
public class Inner{
public void show() {
System.out.println("哈哈哈");
}
}
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
Inner i = hello.new Inner();
i.show();//要使用内部类的方法,首先需要将外部类实例化一个对象,再通过外部类的对象对内部类实例化,最后才能调用内部类的方法。
}
}
a.成员内部类的学习
知识点:除了具有内部类的所有特点,还需注意的是:如果外部类和内部类有相同的变量或者方法,内部类默认访问自己的变量或方法;如果访问 外部类的变量,可以使用this关键字。用代码表现如下:
public class Outer {
int b = 1;
public class Inner{
int b = 2;
public void test() {
System.out.println("访问外部类中的b:"+Outer.this.b);//通过this关键字访问外部类的变量
System.out.println("访问内部类中的b:"+b);//默认访问自己的变量
}
}
public static void main(String[] args) {
Outer o = new Outer();
Inner i = o.new Inner();
i.test();
}
}
运行结果与预期结果一样,验证了该知识点。
b.静态内部类的学习
知识点:(1)静态内部类不能直接访问外部非静态成员,可以通过new 外部类().成员的方式访问;
(2)如果外部类的静态成员与内部类的成员名相同,可通 过类名.静态成员 访问外部类的静态成员;如不相同,可通过成员名直接访问
(3)创建静态内部类的对象时,不需要外部类对象,可以直接创建。
以上知识点都在注释行验证:
public class HelloWorld {
int a = 99;
static int b = 1;
public static class Inner{
int b = 2;
public void test() {
System.out.println("访问外部类中的b"+HelloWorld.b);
System.out.println("访问内部类中的b"+b);//验证知识点(2)
//System.out.println("访问外部类中的a"+a);
System.out.println("访问外部类中的a"+new HelloWorld().a);//验证知识点(1)
}
}
public static void main(String[] args) {
Inner i = new Inner();//验证知识点(3)
i.test();
}
}
c.方法内部类的学习
定义:方法内部类就是定义在外部类方法中的内部类,只在该方法内部可见,即只能在该方法内部使用。
注意事项:因为内部类在外部类的方法中,在使用外部类方法时,要通过内部类对象来调用内部类方法,注释行已标记。
public class MOuter {
public void show() {
int a = 25;
int b = 15;
class MInner{
int c = 2;
public void print() {
System.out.println("访问外部类的常量a:"+a);
}
}
MInner mi = new MInner();
mi.print();// 注意事项:这是如果没有创建内部类对象,则不会执行内部类的方法,切记。
}
public static void main(String[] args) {
MOuter mo = new MOuter();
mo.show();
}
}
2.java中的继承
a.继承的概念:是类与类的关系。子类拥有父类的所有属性和方法。
语法规则:class 子类 extends 父类
b.方法的重写:子类对继承父类的方法不满意,重写继承父类的方法,在调用时优先调用子类的方法。
注意:重写时方法的返回值类型、方法名、与参数类型及个数都要与父类相同,才叫做重写,否则就是方法的重载。
如上图代码所示,我在子类Dog中重写了方法,所以在DogTest中输出的时候会优先调用Dog的方法。成功实现了方法的重写。
c.java中的继承初始化顺序
顺序:先执行父类初始化,再执行子类;先执行初始化对象中的属性,再执行构造方法中的初始化。验证代码如下:
观察输出结果,我们可以知道肯定是先运行的“int age = 10”因为最后输出的是20;第一行显示的是Animal类执行了,我们可以知道,是先运行的 父类初始化。
3.今天写了比较多的代码,感觉非常的开心,顺便鼓舞了一下群里的小伙伴。
明天要做的事情:
1.继续学习java中的继承;
2.学习java中的多态;
3.继续多写代码练习。
今天的收获:
都上图了,今天干货满满。准备写完日报好好消化消化,找些题进行一下练习。
最后的最后,又要麻烦师兄审核了!
评论