继承
为什么需要继承?继承的作用?
第一好处:继承的本质在于抽象 。类是对对象的抽象,继承是对某一批类的抽象。
第二好处:为了提高代码的复用性。(事实上,利用组合可以更好的实现代码复用!)
extands的意思是“扩展”。子类是父类的扩展。
例子
现实世界中的继承无处不在。比如:
动物:
哺乳动物、爬行动物
哺乳动物:
灵长目、鲸目等。
extends j继承
(子类继承父类)
通过继承可以实现代码的重用,简化类的定义。
java中只有单继承,没有c++那样的多继承。
子类可以通过继承父类,拥有父类的成员的变量和成员方法。
在继承中子类可以根据需要重写父类的方法,叫方法的重写(重写方法(方法名,参数列表,返回类型相同,不能用比父类更大的访问权限。))。
定义一个“点”(Point)类用来表示二维空间中的点(有二个坐标)。要求如下: 可以生成具有特定坐标的点对象。 提供可以设置二个坐标的方法。
*提供可以计算该“点”距另外点距离的方法。
public class Point1 {
//定义一个公共属性
double x;
//定义一个公共属性
double y;
//无参构造方法
Point1() {
}
//有参构造方法
public Point1(double x, double y) {
this.x = x;
this.y = y;
}
//get set方法
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
//把坐标通过这个方法打印出来
public void xianshi() {
System.out.println("(" + x + "," + y + ")");
}
//计算
public void jisun(Point1 p) {
System.out.println(Math.sqrt(Math.pow(x - p.x, 2) + Math.pow(y - p.y, 2)));
}
}
在main方法中调用
package com.sxt.duixiang;
public class Test1 {
//main方法
public static void main(String[] args) {
//通过new一个坐标
Point p1=new Point();
Point p2=new Point(2, 0);
p1.setX(2);
p1.setY(1);
double se= p2.distance(p1);
System.out.println(se);
}
super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
animal.shout();
Dog dog = new Dog();
dog.shout();
}
}
class Animal{
void shout(){
System.out.println("发出声音!");
}
}
class Dog extends Animal {
void shout(){
System.out.println("旺旺旺!");
}
}
封装的使用细节
类的属性的处理:
一般使用private. (除非本属性确定会让子类继承)
提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。