一,继承
1,一个类可以通过关键字extends来继承另一个类:继承的语法classA extendsclassB;其中A类叫做子类(subclass),衍生类或派生类;B类叫做父类(superclass),超类,基类;
2,继承的特点:
- 如果多个类中有相同的代码,那么可以将相同的代码写在同一个类当中,这个类就是父类;再去继承这个类可以减少重复的代码;
- 子类可以访问父类中非私有的属性和方法;
- 子类对父类中的方法进行拓展和覆盖叫做对父类方法的重写,重写之后,子类再调用这个方法的时候就是调用重写之后的;
- Java中时单继承,一个子类只能有一个父类,一个父类可以有多个子类;
- Java中可以实现多重继承:A可以继承B,B继承C,这样A就可以访问C中的属性和方法,这样就实现了多重继承;
- 任何类都是object的子类;
- 在创建子类对象的时候先执行父类中相应的构造方法;当父类中的构造方法重载的时候,默认的构造方法就会失效,这是子类就会报错,这是就需要在子类构造方法中使用super调用父类中的构造方法;
- 在使用extend的时候:
public class father(){
father(){
}//每个类都会有一个默认的无参构造方法,并且是不显示的;
}
public class son extends father(){
son(){
father(){//会自动调用父类的构造方法;
}
}
}
3,多重继承不是多继承:多重继承是子类可以访问父类的父类,但还是只有一个父类;而多继承是一个子类可以拥有多个父类;
4,重写和重载:
- 重写:重写是把父类的方法在自己的方法体内进行拓展和覆盖,两者的关系是必须在父子关系的类中在两个不同的类;重写要求返回值,方法名和参数列表(方法三要素),必须相同,访问修饰符不能比父类的范围更小,抛出的异常不能比父类范围更大;
-重载:要求必须在同一个类中,方法名必须相同,参数列表(参数的个数和参数的类型)必须不同,方法名必须相同;
5,this和super:都可以当作对象和构造方法使用;
this:
-this当对象使用:用来调用当前类的属性和方法:this.属性;this.方法;但是只能在方法中使用;
-当构造方法使用,必须是在另一个构造方法的第一行才能使用;否则会报错:Call to 'this()' must be first statement in constructor body;
super:
-super当构造方法使用的时候,只能在子类构造发方法中的第一行;
-super当对象使用的时候,可以用来调用父类中的非私有方法和属性;
6,访问修饰符:
private:私有的,修饰内部类,属性和方法,表示被修饰的对象只能本类中访问;
default:默认的,修饰类,方法和属性,表示被修饰的对象只能被同一个包中的类访问;
protect:受保护的,修饰内部类,方法和属性,表示被修饰的对象,只有其不在同一个包中的子类才能访问,其他情况只能在同一个包中的才能访问;
public:公开的:修饰类,方法和属性;表示被修饰的对象在同一个工程当中可以访问;
其中default和protect的区别为:default只要是不同的包,任何情况都不能进行访问,protect在不同包中的子类可以进行访问;在同一个包中的时候,效果相同;