Java学习-面向对象-继承

  1. 继承是什么?

Java学习-面向对象-继承_第1张图片

示例:

packagejava_jicheng_demo1;

publicclassA{

//创建公开的成员变量,方法

publicStringnane;

publicintage;

publicvoidprint1(){

System.out.println("666");

}

//创建私有的成员变量,方法

privateStringInfo;

privatevoidprint2(){

System.out.println("111");

}

}

packagejava_jicheng_demo1;

publicclassBextendsA{

//创建A的子类

}

packagejava_jicheng_demo1;

publicclassText{

publicstaticvoidmain(String[]args){

//子类可以继承父类的非私有成员

Bb=newB();

System.out.println(b.age);

System.out.println(b.nane);

//System.out.println(b.Info);会报错

b.print1();

//b.print2();会报错

}

}

  1. 执行原理

Java学习-面向对象-继承_第2张图片

  1. 使用继承的好处

Java学习-面向对象-继承_第3张图片

使用继承:

Java学习-面向对象-继承_第4张图片

4.继承的注意事项

  1. 权限修饰符

权限修饰符是什么?有啥用?

Java学习-面向对象-继承_第5张图片

packagejava_jicheng_demo3;

publicclassF{

//创建四种权限修饰符不同的方法

publicvoidpubMe(){

System.out.println("public");

}

protectedvoidproMe(){

System.out.println("protected");

}

voidMe(){

System.out.println("缺省");

}

privatevoidpriMe(){

System.out.println("private");

}

publicvoidtest(){

pubMe();

proMe();

Me();

priMe();//同一个类下均可访问

}

}

packagejava_jicheng_demo3;

publicclassText{

publicstaticvoidmain(String[]args){

Ff=newF();

f.Me();

f.proMe();

f.pubMe();

//f.priMe();同一包下的不同类会报错

}

}

packagejava_jicheng_demo2;

importjava_jicheng_demo3.F;

publicclassF1extendsF{

F1f1=newF1();

publicvoidtest(){

f1.proMe();//不会报错

//f1.priMe();只能在F类中使用

}

}

packagejava_jicheng_demo3;

publicclassText{

publicstaticvoidmain(String[]args){

Ff=newF();

f.Me();

f.proMe();

f.pubMe();

//f.priMe();会报错

}

}

  1. 单继承,Object类

Java学习-面向对象-继承_第6张图片

所有的类都直接或间接地继承了Object类

  1. 方法重写

Java学习-面向对象-继承_第7张图片

例子:希望返回一个具体的对象,而不是一个地址

packagejava_jicheng_demo4;

publicclassStudent{

privateStringname;

privateintage;

publicStudent(){

}

publicStudent(Stringname,intage){

this.name=name;

this.age=age;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringtoString(){

return"Student["+name+","+age+"]";

}

}

packagejava_jicheng_demo4;

publicclassTest{

publicstaticvoidmain(String[]args){

Students1=newStudent("张三",19);

System.out.println(s1);

System.out.println(s1.toString());//两行代码是一样的

//想要输出具体的对象而不是地址可以对toString()方法重写

System.out.println(s1.toString());//两行代码是一样的

}

}

注意事项:

Java学习-面向对象-继承_第8张图片

  1. 子类访问其他成员特点

子类中访问父类,要使用super.成员变量/方法

Java学习-面向对象-继承_第9张图片

  1. Java学习-面向对象-继承_第10张图片
  2. 子类构造器的特点

Java学习-面向对象-继承_第11张图片

代码:

packagejava_jicheng_demo5;

publicclassF{

publicF(){

System.out.println("F类的无参构造器执行了~~");

}

publicF(Stringname,intage){

System.out.println("F类的you参构造器执行了~~");

}

}

packagejava_jicheng_demo5;

publicclassZextendsF{

publicZ(){

System.out.println("子类的无参构造器执行了~~~");

}

publicZ(Stringname,intage){

System.out.println("子类的有参构造器执行了~~");

}

}

packagejava_jicheng_demo5;

publicclasstest{

publicstaticvoidmain(String[]args){

Zz1=newZ();

Zz2=newZ("123",14);

}

}

运行结果:

Java学习-面向对象-继承_第12张图片

Java学习-面向对象-继承_第13张图片

其实每次子类的构造器前都会有一个super()默认没有显示罢了

如果父类没有无参构造器,则需要自己在子类构造器之前手写super()调用父类构造器

Java学习-面向对象-继承_第14张图片

子类构造器调用父类构造器的场景:

Java学习-面向对象-继承_第15张图片

关于兄弟构造器:

例子:

Java学习-面向对象-继承_第16张图片

代码:

privateintage;

privateStringschoolName;

publicStudent(){

}

publicStudent(Stringname,intage){

this(name,age,"黑马程序员");

}

publicStudent(Stringname,intage,StringschoolName){

this.name=name;

this.age=age;

this.schoolName=schoolName;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringgetSchoolName(){

returnschoolName;

}

publicvoidsetSchoolName(StringschoolName){

this.schoolName=schoolName;

}

}

packagejava_jicheng_demo6;

publicclasstext{

publicstaticvoidmain(String[]args){

Students1=newStudent("小李",19,"家里蹲大学");

Students2=newStudent("小黑",10);

}

}

你可能感兴趣的:(java,java,学习,开发语言)