对象

day08-Java面向对象三(代码块/继承/final)

2016-12-31  本文已影响25人  苦笑男神

08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用)

08.02_面向对象(代码块的面试题)(掌握)

08.03_面向对象(继承案例演示)(掌握)

class ThisClass extends SuperClass   //extends继承
{   
}

08.04_面向对象(继承的好处和弊端)(掌握)

08.05_面向对象(Java中类的继承特点)(掌握)

08.06_面向对象(继承的注意事项和什么时候使用继承)(掌握)

08.08_面向对象(this和super的区别和应用)(掌握)

08.09_面向对象(继承中构造方法的关系)(掌握)

08.10_面向对象(继承中构造方法的注意事项)(掌握)

08.11_面向对象(继承中的面试题)(掌握)

class Fu {
    public int num;

    public Fu(){
        System.out.println("fu");
    }
}

class Zi extends Fu {
    public int num = 20;

    public Zi() {
        System.out.println("zi");
    }

    public void show(){
        int num = 30;
        System.out.println(num);
        System.out.println(this.num);  //输出20
        System.out.println(super.num); //输出10  好好理解为什么二者不为啥不一样

    }
}

// 运行语句
Zi zz = new Zi();
zz.show();

// 分析
// java中继承关系的父子类,相同的方法会被重写
// 属性没有重写之说,如果子类声明了跟父类一样的属性,那意谓着子类中将有两个相同名称的属性
// 例子中,Fu和Zi类都有一个属性 num
// 但是在子类中,this.num 和 super.num 却是输出不同的值,证明了此点。
class Fu {
    static {
        System.out.println("静态代码块Fu");
    }
    
    {
        System.out.println("构造代码块Fu");
    }
    
    public Fu() {
        System.out.println("构造方法Fu");
    }
}
    
class Zi extends Fu {
    static {
        System.out.println("静态代码块Zi");
    }
    
    {
        System.out.println("构造代码块Zi");
    }
    
    public Zi() {
        System.out.println("构造方法Zi");
    }
}

// 运行语句
Zi s2 = new Zi();

// 输出结果是
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi

// 分析
// 1.JVM调用main方法,main方法进栈
// 2.遇到Zi s2 = new Zi();会将Fu.class和Zi.class分别加载到方法区内存
//   当Fu.class加载到内存,父类的静态代码块会随着Fu.class一起加载
//   当Zi.class加载到内存,子类的静态代码块会随着Zi.class一起加载
// 3.走子类构造方法,构造方法的分层初始化:先初始化父类,再初始化子类,但是
//   在实行父类构造方法时,发现父类有构造代码块,构造代码块是优先于构造方法执行的。
// 4.所以先输出父类的构造代码块-->构造方法,其次是子类的构造代码块-->构造方法

08.12_面向对象(继承中成员方法关系)(掌握)

08.13_面向对象(方法重写概述及其应用)(掌握)

08.14_面向对象(方法重写的注意事项)(掌握)

08.15_面向对象(方法重写的面试题)(掌握)

08.19_面向对象(final关键字修饰类,方法以及变量的特点)(掌握)

// 修饰变量,变量就变成了常量,只能被赋值一次
// 常量命名一般都是大写
// final常量,一般会与public和static一起修饰
public static final int NUMBER_XXOO = 100 ;

public final void xxoo(final int a)
{
    a++ ;  //报错 final修饰方法参数,参数值不能被改变
    System.out.println("final修饰方法,方法不能被重写");
}

final class  FinalClass  //final修饰类,类不能被继承:不能拥有子类
{
}

08.20_面向对象(final关键字修饰局部变量)(掌握)

final Person p = new Person();
p = new Person();  //报错,因为p指向的地址是final,不能再改变

p.name = "XXOO1";  //不会报错
p.name = "XXOO2";

08.21_面向对象(final修饰变量的初始化时机)(掌握)

END。
我是小侯爷。
在魔都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
如果读完觉得有收获的话,记得关注和点赞哦。
非要打赏的话,我也是不会拒绝的。

上一篇 下一篇

猜你喜欢

热点阅读