继承
public class B extend A{` /*A类称为父类(基类,超类)。B称为子类(派生类)。*/ `}
特点:子类能继承父类的非私有成员变量(成员变量,成员方法)。
继承后对象的创建:子类的对象是由子类、父类共同完成的。
继承的好处:减少代码重复性。
权限修饰符:用来限制类中的成员(成员变量、成员方法、构造器、代码块)能够被访问到的范围。
单继承:Java是单继承,Java中的类不支持多继承,但是支持多层继承。
class A{} class B{} //class C extends A,B{} 多继承报错
//java支持多层继承 class A{} class B extends A{} class C extends B{}
Object类:任何类都是直接或间接继承Object类。
方法重写:子类可以重写一个方法名称参数列表一样的方法,去覆盖父类的方法,重写后,方法的访问,Java会遵循就近原则。
方法重写的注意事项:1.用Override注解(他可以指定编译器,检查重写格式是否正确)。2.子类重写父类方法时,访问权限必须大于或者等于父类的权限(public>protected>缺省)。3.重写的方法返回值类型,必须与被重写的方法返回值类型一样,或者范围更小。4.私有方法、静态方法不能被重写。
总之,遵循一个原则就行,申明不变,重新实现。
方法重写的应用场景:子类重写Object类的to String()方法,以便放回对象的内容。
//day2.Stuent@3b07d329重写之前放回地址 @Override public String toString(){ return "name="+name+",age="+age; } //name=null,age=0重写之后放回的
在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。
public class Test2 { public static void main(String[] args) { Z z=new Z(); z.showname(); } public static class F{ private String name="父类名字"; public void print1(){ System.out.printf("==父亲的print1方法执行=="); } } public static class Z extends F{ private String name="子类名字"; public void showname(){ String name="局部名字"; System.out.println(name);//局部名字 System.out.println(this.name);//子类名字 System.out.println(super.name);//父类名字 } //访问成员方法类似,不做演示。 } }
子类构造器:子类的全部构造器,都会先调用父类的构造器,在执行自己。
this(...)调用兄弟构造器:任意类的构造器中,是可以通过this(...)去调用该类的其他构造器的。(this()、super()都只能放在构造器的第一行,因此有了this()就不能写super(),反之亦然。)
package day2; public class Test3 { public static void main(String[] args) { //需求:如果学生没有填写学校,那么学校就默认为黑马程序员 Student stu1 = new Student("张三",18); System.out.println(stu1.getName());//张三 System.out.println(stu1.getAge());//18 System.out.println(stu1.getSchool());//黑马程序员 } } class Student{ private String name; private int age; private String school; public Student() { } //通过this(...)去调用该类的其他构造器 public Student(String name,int age){ this(name,age,"黑马程序员"); } public Student(String name, int age, String school) { this.name = name; this.age = age; this.school = school; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } }