有什么可以在线做奥数题的网站,东莞微信网站建设品牌,wordpress 移动端优势,中企动力潍坊分公司文章目录 1.方法的覆写2.类的层次结构3.如何判定正确的继承顺序4.如何判断子类继承#xff08;继承这个词我始终觉得很变扭#xff09;了父类的什么5.继承关系的实质6.关键字#xff1a;super 和 this[1].this关键字#xff08;1#xff09;this关键字调用本类属性#x… 文章目录 1.方法的覆写2.类的层次结构3.如何判定正确的继承顺序4.如何判断子类继承继承这个词我始终觉得很变扭了父类的什么5.继承关系的实质6.关键字super 和 this[1].this关键字1this关键字调用本类属性2this关键字本类方法调用3this关键字使用的注意事项 [2].super关键字1super关键字调用父类属性2super关键字调用父类方法 [3].super关键字和this关键字的区别 今日提要再谈继承 1.方法的覆写
儿子遗传了爹的鼻窦炎还有哮喘扩展基类或者说超类的方法和实例变量可是儿子的鼻窦炎更高级了儿子的诊断里面就增加自己特别的鼻窦炎覆盖基类或超类的方法这就是子类对父类基类或超类的覆写这里注意实例变量是不会被覆写因为实例变量不定义任何特殊的行为它们只表达状态 这里需要注意的是方法的覆写只针对这个子类子类在实例化形成对象时可以用自己的同名方法覆写父类基类或超类的方法以达到子类个性化表达的作用。 #mermaid-svg-RqJ5kfPVqov6SN1o {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RqJ5kfPVqov6SN1o .error-icon{fill:#552222;}#mermaid-svg-RqJ5kfPVqov6SN1o .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RqJ5kfPVqov6SN1o .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-RqJ5kfPVqov6SN1o .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RqJ5kfPVqov6SN1o .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RqJ5kfPVqov6SN1o .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RqJ5kfPVqov6SN1o .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RqJ5kfPVqov6SN1o .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RqJ5kfPVqov6SN1o .marker.cross{stroke:#333333;}#mermaid-svg-RqJ5kfPVqov6SN1o svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RqJ5kfPVqov6SN1o g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-RqJ5kfPVqov6SN1o g.classGroup text .title{font-weight:bolder;}#mermaid-svg-RqJ5kfPVqov6SN1o .nodeLabel,#mermaid-svg-RqJ5kfPVqov6SN1o .edgeLabel{color:#131300;}#mermaid-svg-RqJ5kfPVqov6SN1o .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-RqJ5kfPVqov6SN1o .label text{fill:#131300;}#mermaid-svg-RqJ5kfPVqov6SN1o .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-RqJ5kfPVqov6SN1o .classTitle{font-weight:bolder;}#mermaid-svg-RqJ5kfPVqov6SN1o .node rect,#mermaid-svg-RqJ5kfPVqov6SN1o .node circle,#mermaid-svg-RqJ5kfPVqov6SN1o .node ellipse,#mermaid-svg-RqJ5kfPVqov6SN1o .node polygon,#mermaid-svg-RqJ5kfPVqov6SN1o .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RqJ5kfPVqov6SN1o .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-RqJ5kfPVqov6SN1o g.clickable{cursor:pointer;}#mermaid-svg-RqJ5kfPVqov6SN1o g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-RqJ5kfPVqov6SN1o g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-RqJ5kfPVqov6SN1o .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-RqJ5kfPVqov6SN1o .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-RqJ5kfPVqov6SN1o .dashed-line{stroke-dasharray:3;}#mermaid-svg-RqJ5kfPVqov6SN1o #compositionStart,#mermaid-svg-RqJ5kfPVqov6SN1o .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #compositionEnd,#mermaid-svg-RqJ5kfPVqov6SN1o .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #dependencyStart,#mermaid-svg-RqJ5kfPVqov6SN1o .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #dependencyStart,#mermaid-svg-RqJ5kfPVqov6SN1o .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #extensionStart,#mermaid-svg-RqJ5kfPVqov6SN1o .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #extensionEnd,#mermaid-svg-RqJ5kfPVqov6SN1o .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #aggregationStart,#mermaid-svg-RqJ5kfPVqov6SN1o .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o #aggregationEnd,#mermaid-svg-RqJ5kfPVqov6SN1o .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RqJ5kfPVqov6SN1o .edgeTerminals{font-size:11px;}#mermaid-svg-RqJ5kfPVqov6SN1o :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 覆写方法 覆写方法 动物 String 名字 int 大小 String 食物 int 饥饿度 void 叫声() void 行动() void 饮食() void 睡眠() 猫 void 行动() void 饮食() 鸟 void 行动() void 饮食() 用中文是为了比较好读代码里别用… 鸟的行动是飞行你要非跟我抬杠鸵鸟不能飞你也可以在写鸵鸟这个类的时候直接覆写鸟类的行动… 猫是在地面奔跑的别说爬树说我也不理你 鸟是吃素的猫是吃荤的这都是它们自己的特点所以为它们建立自己的相关方法覆写基类里面的相同方法以达到依据特点实例化的目的 方法的调用也是遵循从具体到通用的优先级管理也就是说当你X.eat();//调用一个吃的方法的时候JVM会从最底层的类开始依次向上寻找首先出现的就直接调用一句话概括JVM会选择对特定对象最特定的那个版本调用
2.类的层次结构
用动物举例这个比较好说明我看的资料里面都用动物看来大家都这么认为的。好比猫、狗、狼和老虎四个对象我们发现猫和老虎都属于猫科那么抽象出来的猫科就是猫和老虎的父类而狗和狼都属于犬科同理犬科就是狗和狼的父类然后犬科和猫科都是动物中的一个种类那么就可以抽象出来动物类那么动物类就是猫科和犬科的父类这就是类的层次结构这个应该很好懂但是实际上抽象的过程想当考验逻辑能力和想象力还是有个心理准备的好
3.如何判定正确的继承顺序
我们怎么来确定我们建立的父类是不是某个特定子类的父类呢方法很简单就是问一下是不是 比如男老师是不是老师呢猫是不是动物外科医生是不是医生等等等等只要这个问题的答案是肯定的那么后面的类就是前面特定类的父类还有一点很重要必须要注意是不是这个问题是单向的不能反过来问如果反过来问也出现了肯定的答案那么这个类的继承肯定是有问题的
4.如何判断子类继承继承这个词我始终觉得很变扭了父类的什么
我们说过Java有四种访问权限从严格到宽松依次是privatedefaultprotecedpublic; 现在我们只讨论两种情况如果方法被private私有修饰那么成员不可继承如果方法被public公共修饰成员可以继承
5.继承关系的实质
其实继承关系的实质就是为一组类建立了统一的一个协议并遵循协议运行比如Java本身
6.关键字super 和 this
[1].this关键字
1this关键字调用本类属性
this代表当前对象调用类中方法或属性的那个对象的引用this只能在方法内部使用this.属性名表示对象自己的属性 来看两段代码 代码一
public class ThisTest {private int num;private String col;ThisTest(int num,String col){num num;col col;}public static void main(String[] args) {ThisTest t1 new ThisTest(20,oo);ThisTest t2 new ThisTest(30,oopp);System.out.println(t1.num , t2.num);System.out.println(t1.col , t2.col);}}
输出结果
00
nullnull代码二
public class ThisTest {private int num;private String col;ThisTest(int num,String col){this.num num;this.col col;}public static void main(String[] args) {ThisTest t1 new ThisTest(20,oo);ThisTest t2 new ThisTest(30,oopp);System.out.println(t1.num , t2.num);System.out.println(t1.col , t2.col);}}
输出结果
2030
oooopp当构造函数参数与实例变量同名时实例变量就被屏蔽了它们是无法通过构造函数直接赋值的当添加了this关键字之后就可以被对象赋值了而this关键字指代的是 t1 和 t2这两个对象的引用 来看第三段代码
public class ThisTest {private int num;private String col;ThisTest(int tempnum,String tempcol){num tempnum;col tempcol;}public static void main(String[] args) {ThisTest t1 new ThisTest(20,oo);ThisTest t2 new ThisTest(30,oopp);System.out.println(t1.num , t2.num);System.out.println(t1.col , t2.col);}}
输出结果
2030
oooopp自己看不同吧太明显了
2this关键字本类方法调用
this关键字调用构造函数必须在构造函数的第一行
public class ThisTest {private int num;private String col;ThisTest(int num){ this.num num; }ThisTest(String col){this(20);this.col col;}public static void main(String[] args) {ThisTest t1 new ThisTest(oo);ThisTest t2 new ThisTest(oopp);System.out.println(t1.num , t2.num);System.out.println(t1.col , t2.col);}}输出结果
20 , 20
oo , oopp重载的构造函数里面的第一行this(20)调用的就是ThisTest(int num){......}必须在第一行
this关键字调用本类方法
public class ThisTest {void move() {System.out.println(好好学习);}void result() {this.move();System.out.println(天天向上);}public static void main(String[] args) {ThisTest s1 new ThisTest();s1.result();}}输出结果
好好学习
天天向上this.move();调用的就是方法void move() {...},调用方法的时候无所谓第几行就看你的需要了
3this关键字使用的注意事项
this关键字只可以用于普通的实例方法this关键字不可以在静态方法或静态块中使用main()函数就是静态方法
[2].super关键字
1super关键字调用父类属性
说别的啥都没啥用看代码吧
public class SuperTest {public static void main(String[] args) {SonClass s1 new SonClass();s1.show();}}
class SuperClass{int num 100;
}
class SonClass extends SuperClass{int num 10;void show () {System.out.print(爹的num super.num , 儿子的num num);}
}输出结果
爹的num 100 , 儿子的num 10子类里面的super.num调用的就是父类class SuperClass{ int num 100;}里面的变量num的值
2super关键字调用父类方法
super关键字调用构造函数必须在第一行 第一段代码
class SuperClass{int num;String col;SuperClass(){}
}
class SonClass extends SuperClass{SonClass(){super();}
}子类的构造函数必须依赖父类的构造函数而建立如果父类的构造函数为无参空函数super();是默认存在的不需要写
第二段代码
class SuperClass{int num;String col;SuperClass(int num,String col){}
}
class SonClass extends SuperClass{SonClass(){super(20,oo);}
}父类的构造函数含有参数的super关键字必须依照父类构造函数的参数列表填写super关键字访问父类方法 第三段代码
public class SuperTest {public static void main(String[] args) {SonClass s1 new SonClass();s1.result();}}
class SuperClass{void move() {System.out.println(好好学习);}
}
class SonClass extends SuperClass{void result() {super.move();System.out.println(天天向上);}
}输出结果
好好学习
天天向上这个一看就明白了不用多说了
[3].super关键字和this关键字的区别
这就是为什么要把这两个关键字都放在这里一起说的原因了
super()调用父类的构造函数必须在构造函数的第一行this()调用本类构造函数必须在构造函数的第一行看到这里大家应该明白一件事情了super()和this()不能同时调用构造函数;this代表调用者这个对象super代表父类对象的引用this没有继承也能使用super必须在继承条件下this()本类构造super()父类构造
今天的内容就写到这里了里面太多中文要翻译成中文了非常费劲