java继承与多态
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是继承?
如果B类具有A类的全部属性和方法,而且又具有自己特殊的某些属性和方法,则把类A称作一般类。把类B称作特殊类。这种一般与特殊的结构,可以用继承所表达和实现,继承1使得某类对象可以继承另外一类对象的属性和方法。
二、继承的实现
说明: 修饰符同类的声明,【public省略】,或者【final】,或者都不选。 子类名必须符合命名规则 extends是关键字 父类,可以是自定义的类,也可以是系统类库中的类,如果省略父类,其默认的父类是java.lang.Object类 子类可以添加新的成员变量和成员方法,也可以隐藏父类的成员变量或者覆盖父类中的成员方法 Java只支持单继承 类之间的继承具有传递性。 Java中,类Java.lang.Object是一切父类或根类,所有类都是通过直接或间接地继承java.lang.Object得到的。因此,往往把Object称为万类之源。 Java不支持多重继承,一个子类只能继承一个父类,父类包括所有直接或间接继承它地类,类的继承可以传递。 Shape.java文件
package first;
public class Shape {
String type;
public void setType(String type) {
this.type=type;
}
public String getType() {
return type;
}
}
Circle.java文件
package first;
public class Circle extends Shape {
double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius=radius;
}
public double getArea() {
double area=Math.PI*radius*radius;
return area;
}
public double getPerimeter() {
return 2*Math.PI*radius;
}
public static void main(String[] args) {
Circle myshape= new Circle();
myshape.setType("圆");
myshape.setRadius(5.2);
System.out.println("myshape的类别是:"+myshape.getType());
double area=myshape.getArea();
System.out.println("myshape的面积是:"+area);
System.out.println("myshape的周长是:"+myshape.getPerimeter());
}
}
1.继承的规则
Java中,当声明了直接子类和直接父类的继承关系后,直接子类继承直接父类。除构造方法外,子类可继承父类所有的成员方法变量和成员方法,但是否能够直接访问,还要看其访问修饰符的控制范围。
2.属性的继承
- 属性的继承和扩展
根据继承规则,子类可以继承父类所有的属性,还可以增加自己的成员变量。
3.属性的隐藏
属性隐藏是指子类重新定义一个从父类哪里继承来的与变量完全相同的变量。所谓隐藏,是指子类拥有了两个相同名字的成员变量。一个继承自父类,另一个是自己定义的成员变量。
属性代码隐藏测试 代码如下(示例):
Person.java 文件
package first;
public class Person {
String id;
String name;
String address="111";
public Person() {
}
public void showName() {
System.out.println(name);
}
}
Student.java文件
package first;
public class Student extends Person{
String address="长沙";
String school="长沙理工";
public Student() {
}
public void showInfo() {
showName();
System.out.println("Student:"+address+" "+"Student:"+school);
}
public static void main(String[] args) {
Student stu= new Student();
stu.showInfo();
}
}
三、方法的继承
1.方法的继承和扩展
子类可以继承父类的成员方法,还可以增加自己的成员方法,子类对象可以使用从父类中继承过来的方法。
2.方法的重写
方法的重写是指子类重新定义从父类继承来的方法,而使子类具有自己的行为,满足自己的需要。 方法重写注意以下几个问题: 子类中重写的方法应与父类中的被覆盖的方法有完全相同的方法名称。参数列表,返回值类型 但执行的方法体不同 重写过后的方法不能比被重写的方法有更严格的访问限制(访问控制权按照严格的顺序是:privaate default protected public)即子类比父类扩大原则。 可以部分重写父类方法 ,在原方法的基础上添加新的功能,即在子类的覆盖方法的第一条语句位置添加一条语句,super()原方法名()。 不能重写父类的final()方法,final方法定义的目的是为了防止被重写。 关于static 修饰符 子类和父类必须一致,都有或者都没有 一般有以下几种情况下使用方法重写 子类中实现与父类相同的功能,但是算法不同 在名字相同的方法中,子类的操作要比父类多 在子类中取消从父类中继承的方法,这种情况下,只需要重写不需要的父类方法,将方法体设为空。
思考方法重载和重写的区别? 当子类重写父类方法时,由于同名方法分别属于父类和子类,所以需要区分调用了哪个类中的方法,一般情况下,只要在方法前面使用不同类的对象或者不同类名即可,如果直接调用父类的方法可以用super关键字。
|