1.继承减少代码的重复量工作
2.继承默认继承Object类 ------extends Object;
3.优先找类--->类方法--->父类方法 没有的情况下 依次执行(子债父还)
extends---前端--延伸--扩展
继承自身没有往上找
@Override //重写父类方法 return
如何查看源码 CTRL+鼠标左键
’执行流程 JVM执行发现有个父类对象 先去创建父类对象--创建父类对象Object ---创建父类对象构造方法---创建子类对象(Object 在使用继承时,JAVA的IDEAR会隐藏)
流程图示例:
继承父类所有属性
如果是私有的也有只是父类没有公开
作用:减少代码重复使用---少敲一下固定的属性
在创建父类对象的时候会默认先寻找无参数构造方法
!!!JAVA虚拟机,会在你没写构造方法时提供一个无参数构造方法
当你写了一个有参数构造方法时会替换掉提供原有的无参数构造方法
所以在写一个有参时会先写一个无参!
不要一直用super
优先使用this
super只能写在第一行-----作业
package cn.tom.day95;public class Pet { private String name; private double price; public Pet() { System.out.println("pet构造方法----"); } public Pet(String name){ this.name=name; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + ", price=" + price + '}'; } }
package cn.tom.day95;public class Pig extends Pet { // @Override public String toString(){ return "pig toString"; }// public String toString() {// //获取内存字节码文件+he(16进制)// return getClass().getName() + "@" + Integer.toHexString(hashCode());// }}
package cn.tom.day95; public class Dog extends Pet { //强制指定父类构造方法 private String color; public Dog(String name,double price,String color){ //super指向上级的构造方法 super(name); //先定义到父类的 然后再点.set来修改 Dog.super.setPrice(200);//不好 //等价 this.setPrice(200); //自身 this.color="黄色"; } public static void main(String[] args) { System.out.println(); } }
package cn.tom.day95; public class DemoPig { public static void main(String[] args) { Pig pig=new Pig(); // //会输出包名和类名称; // System.out.println(pig.toString()); pig.setName("猪1"); pig.setPrice(500); System.out.println(); System.out.println(pig.getName()+" "+pig.getPrice()); //优先找类---类方法---父类方法 没有的情况下 依次执行 } }
9月6日复习:
继承是写父类代码:减少代码重复性,更加便捷
面向对象可以延伸扩展,莲藕
继承是用自己有的类称之为父类或者超类作为基础类
自雷拥有父类的定义,并且自雷可以定义新的功能或能增加新的数据
使用继承我们可以很方便的附庸已的父类代码
继承是“is--a”的关系,有两个对象,动物者两个对象叫做
this 找自身 自身免疫向上找
子类可以拥有自身的属性和方法,即子类可以对父类进行扩展
作业详解:
尽量少用 super. 运行很麻烦
常见的几种访问修饰符:
idea系统会给我们添加super();
默认调用父类无参构造方法
Object也是继承有的东西
super必须放在第一行
什么情况使用super. 子类重写了父类方法之后就使用“super. ”正常情况下this.是寻找自身方法,如果没有就往上找
代码示例:
一旦使用了,就不能使用自身的重写方法----*-失去了程序的扩展性
重写父类方法要加上Override:还可以帮助检查是否正确重写
注意:
重载:方法名一样,参数类型不一样,访问修饰符不样
重写:方法名一样,参数类型一样,访问修饰符一样
如何区分重写和重载:重写加上一个Override
通过this找自身 自身没有向上找
1.this.
对象声明优先声明父类指向子类对象----this指向子类对象
代码示例:
package cn.tom.day96; public class Shape { public double getZc(){return 0;} public String getInfo(){return "我是抽象图形无法计算";} }
package cn.tom.day96; public class Circle extends Shape { private int r; public Circle() { } public Circle(int r) { this.r = r; } public int getR() { return r; } public void setR(int r) { this.r = r; } @Override public double getZc(){ return r*3.14; } @Override public String getInfo(){ return "我是圆,半径为"+r/2; } @Override public String toString() { return "Circle{" + "r=" + r + '}'; } }
package cn.tom.day96; public class Rect extends Shape{ private double width; private double height; public Rect() { } public Rect(double width, double height) { this.width = width; this.height = height; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } @Override public double getZc(){ return width+height; } @Override public String getInfo(){ return "我是长方形:"+"长"+width+" 宽"+height; } @Override public String toString() { return "Rect{" + "width=" + width + ", height=" + height + '}'; } }
package cn.tom.day96; public class Demo { public static void main(String[] args) { Shape x=new Circle(3); System.out.println(x.getInfo()+" 周长是"+x.getZc()); Shape x2=new Rect(3,4); System.out.println(x2.getInfo()+" 周长是:"+x2.getZc()); } }
面向对象是什么?
可扩展,可重写,莲藕
封装--继承--多态
继承的本质:自身没有找父类对象
重载:常见举例sout---不用写那么多方法名--方便
超级父类:Object类!!!
如果想把各种类型 加入数组类型或者List类型 就用Object
toString--继承重写扩展的体现
老师笔记链接:
有道云笔记 课件