java中访问修饰符可以用来修饰属性和成员方法以及类,达到控制访问权限的功能。
需要注意的是只有默认和public才能用来修饰类,并且遵循以上权限特点
另外需要注意一点,成员方法的访问规则和属性完全一样
这里记录一下自己对面向对象中继承的自己一点的理解:
1.子类继承了父类所有的属性和方法,非私有的属性和方法可以在子类中直接进行访问,私有类型的属性和方法不能直接方法,但是可以通过父类提供的公开方法进行访问私有的类型和方法。
2.子类必须调用父类的构造器,完成父类的初始化(子类无参构造器中默认有super();(该语句默认被隐藏,该语句会调用父类无参构造器)完成对父类的初始化)。
3.当创建子类对象时,不管使用子类哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不会通过。
4.java中所有类都是Object的子类,Object类是所有类的基类
5.父类构造器的调用不仅仅限于直接父类,将一直追溯到Object类。
6.子类只能直接继承一个父类,要想同时继承两个父类可以通过间接继承两个父类,来实现同时继承两个父类的关系。
7.继承不能滥用,继承关系之间要满足is——a的逻辑关系!
以上2,3两点十分重要归根结底的讲就是 子类必须先完成父类的初始化,默认是有无参构造器的,当没有无参构造器的时候需要在子类构造器中用super指明对父类哪个构造器进行初始化
注意事项:super();必须放在构造器中的第一句,this();也只能放在构造器中第一句,所以this();和super();不能在同一个构造器中使用!
//父类 class dad{ int n; String name; public dad(String name){ this.name=name; }//定义构造器后默认无参构造器被覆盖了 } //子类 class son extends dad{ int n; public son(){ super("smith");//完成对父类初始化的构造器的指定。如果不指定的话,会报错,因为默认无参构造器被覆盖了。 } }
谈谈继承的优点:继承的使用大大减少的代码的复用,同时增加了程序的扩展性和可维护性,方便修改代码。