一,首先,我们先来了解一下生活中的继承:
子承父业
龙生龙 凤生凤
老鼠生来会打洞
你长得真像你父亲
二,在java中的继承
继承是类和类之间的关系
继承至少得两个类:
语法格式:
class B extends A { }
其中 B是一个类,A是一个类
B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)
三,接着我们展示一下入门案例:
package com.qfedu.b_extends; class Father { String name; int age; //行为 public void eat () { System.out.println("吃大盘鸡拌面"); } } //使用了extends以后 Son 类就继承了Father这个类 //就意味着我Son类可以使用Father类下面某些属性和某些方法 class Son extends Father{ } public class Demo1 { public static void main(String[] args) { Son son = new Son(); //发现继承以后,可以使用父类一些属性 son.name = "小骚磊"; son.age = 1; System.out.println(son.name); System.out.println(son.age); son.eat(); } }
案例:
Animal 类 父类
Dog类 子类
Cat类 子类
继承的意思,就是将父类的属性和方法拿到子类中去使用
1.成员变量(属性)
公开的和默认的属性,子类可以继承使用的
私有的成员变量,子类无法使用的
2.成员方法
公开的和默认的成员方法,子类可以继承使用
私有的成员方法,子类无法使用的
总结:凡是私有的 无法继承。
3.构造方法
先执行父类的构造,再执行子类的构造方法
如果父类中有有参构造,但是没有无参构造。子类会报错
关于构造方法:父类与子类的构造方法的形式保持一致。 父类中有无参构造。子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法
package com.qfedu.c_extends; class Father { //只要是公开的或者默认的属性,子类可以使用的 public String name;//公开的一个属性 int age;//就是默认的属性 private int id;//private修饰的 子类不能使用 public Father () { System.out.println("父类的构造方法"); } public Father (String name) { this.name = name; } //eat方法 使用public修饰的 子类可以使用 public void eat () { System.out.println("吃窝窝头"); } //默认的方法 子类是可以使用的 void work () { System.out.println("开拖拉机耕地"); } // 使用private修饰的方法就是私有化的方法,子类能调用吗?不能 private void smoking () { System.out.println("抽旱烟"); } } class Son extends Father { //在子类写有参构造即可 } public class Demo1 { public static void main(String[] args) { Son son = new Son(); //验证name age在子类中可以使用的 son.name = "狗蛋"; son.age = 12; //son.id = 12; son.eat();//可以使用父类的公开的方法 son.work(); //不可以使用父类私有化的方法 //.son.smoking(); } }
刚才在写代码的时候,发现私有成员变量子类不能用。还有私有化的方法子类不能调用。咋办?
package com.qfedu.c_extends; class Father1 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private void smoking () { System.out.println("抽旱烟"); } public void test () { smoking(); } } class Son1 extends Father1 { } public class Demo2 { public static void main(String[] args) { Son1 son1 = new Son1(); //咋办? 可以使用setter和getter方法 //son1.name = ""; son1.setName("狗蛋"); System.out.println(son1.getName()); son1.test(); } }
练习的案例:
Animal 类:
属性 : name, age ,sex 私有化的
方法: 吃 运动
子类:Panda
使用Panda继承Animal 并可以使用Animal下面的所有属性和方法,对属性进行赋值
方法调用
package com.qfedu.c_extends; 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中可以多重继承
package com.qfedu.c_extends; class A { } class B extends A{ } class C extends B { } public class Demo4 { public static void main(String[] args) { } }
总结:
1.至少两个类,使用关键字extends 2.子类是否能使用父类的成员变量和成员方法 子类不能使用父类私有化的所有的东西