继承
1.1.生活中的继承
子承父业
龙生龙 凤生凤
老鼠生来会打洞
你长得真像你父亲
1.2.Java中继承
继承是类和类之间的关系,继承至少得两个类。
语法格式:
class B extends A {
}
其中 B是一个类,A是一个类。B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)
在Java中,一个已有类通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Java中不允许多继承,可以多重继承。
继承的意思,就是将父类的属性和方法拿到子类中去使用 。但是凡是私有的 无法继承。
1.成员变量(属性)
公开的和默认的属性,子类可以继承使用的
私有的成员变量,子类无法使用的
2.成员方法
公开的和默认的成员方法,子类可以继承使用
私有的成员方法,子类无法使用的
总结:凡是私有的 无法继承。子类不能使用父类私有化的所有的东西。
3.构造方法
先执行父类的构造,再执行子类的构造方法
如果父类中有有参构造,但是没有无参构造。子类会报错
关于构造方法:父类与子类的构造方法的形式保持一致。 父类中有无参构造。子类也有无参构 造。父类中没有无参构造,子类也没有无参构造方法。
案例:
Animal 类:
属性 : name, age ,sex 私有化的
方法: 吃 运动
子类:Panda
使用Panda继承Animal 并可以使用Animal下面的所有属性和方法,对属性进行赋值
对方法进行调用
class Animal {
private String name;
private int age;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
//方法
public void eat () {
System.out.println("吃饭");
}
public void sport () {
System.out.println("运动");
}
}
class Panda extends Animal {
}
//继承有啥好处呢?代码可以重复利用
class Cat extends Animal {
}
class Dog extends Animal {
}
public class Demo3 {
public static void main(String[] args) {
Panda panda = new Panda();
panda.setName("熊大");
panda.setAge(9);
panda.setSex('公');
panda.eat();
panda.sport();
}
}
Java中的继承都是单继承。只能有一个父类
Java中可以多重继承。
class A {
}
class B extends A{
}
class C extends B {
}
public class Demo4 {
public static void main(String[] args) {
}
}
重写
重写目的:
子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法 。
重写的要求:
1.必须有继承关系
2.父类的方法必须是非私有化的
3.在子类中重写父类的方法,这个方法除了方法体不一样其他都一样的。
4.必须再子类中去重写
class Transportation {
public void run () {
System.out.println("可以跑......");
}
}
//当父类不能满足子类的需求的话可以在子类中重写父类的方法
class Fly extends Transportation {
//重写的方法 和父类 的 返回值 参数 方法名字 一模一样,但是方法体不一样的
@Override//开启重写的严格的限制,告知编译器,下面的方法必须是重写的
public void run () {
System.out.println("飞机跑的很快大概500km/h");
}
}
class Train extends Transportation {
@Override
public void run() {
System.out.println("在铁轨上跑的300km/h");
}
}
class Bus extends Transportation {
@Override
public void run() {
System.out.println("在公路上跑的60km/h");
}
}
public class Demo2 {
public static void main(String[] args) {
Train train = new Train();
train.run();
}
}
重载
在Java中同一个类中可以有很多个方法。方法名字一样。但是参数类型不一样。这种叫重载 。
1.方法的重载必须在同一个类中
2.方法名字必须一致
3.方法的参数类型必须不一样
4.方法的返回值可以不一样
5.无参构造和有参构造 也是一种重载
class Person {
//在一个类中,方法法名字一样,但是参数一定不一样。这叫方法的重载
//返回值可以不一样
public void test () {
System.out.println("test");
}
public void test (String name) {
System.out.println(name);
}
public void test (int i) {
System.out.println(i);
}
void test (double d1) {
}
public String test(String str1, String str2) {
return str1 + str2;
}
}
public class Demo3 {
public static void main(String[] args) {
}
}