首页 > 其他分享 >Extends继承

Extends继承

时间:2024-09-25 16:04:32浏览次数:8  
标签:继承 System class Extends println 父类 public out

java提供了一个关键字用来表示继承关系:extends
    写法:class B extends A{} 表示B类继承自A类
        这里的B称之为:子类,派生类
        这里的A称之为:父类,基类或者超类
  子类继承父类非私有成员
点击查看代码
class Animal{
    String name;
    int age;

    public void eat(){
        System.out.println("吃饭");
    }

    public void sleep(){
        System.out.println("睡觉");
    }
}

class Dog extends Animal {
    //子类相当于这里有一份父类中的非私有成员

    public void lookDoor(){
        System.out.println("看家");
    }
}

class Cat extends Animal{

}

public class ExtendsDemo1{
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        System.out.println(dog.age);
    }
}

java中,类与类之间继承的时候,不允许一次继承多个类,只允许单继承,但是可以进行多重继承,形成继承体系

点击查看代码
class Mother{

}

class GrandFather{

}

class Father extends GrandFather{

}

class Son extends Father{

}


//class Son extends Mother,Father{
//
//}

public class ExtendsDemo2 {
    public static void main(String[] args) {

    }
}
    使用继承的注意事项:
        1、子类无法继承父类中私有的成员
        2、子类不能继承父类的构造方法
        3、不要为了部分功能而去继承
点击查看代码
class Fu1{
    int a = 10;
    private int b = 20;


    Fu1(){
        System.out.println("这是父亲的无参构造方法");
    }

    public void show1(){

    }

    private void show2(){

    }
}

class Son1 extends Fu1{
//super()之所以输出Fu1(),是因为初始化了Fu1()  此处省略了super()
    public void fun1(){
        System.out.println(a);//
//        System.out.println(b); //b是fu1私有的
        show1();
//        show2();  这是父类私有的方法,如果想调用的话需要设置一个非私有的方法在进行调用


    }
}

public class ExtendsDemo3 {
    public static void main(String[] args) {
        Son1 son1 = new Son1();
        System.out.println(son1.a);
//        System.out.println(son1.b);//b是fu1私有
    }
}
    子类寻找成员变量并使用的流程:
        1、先就近原则,在方法内部中查找一次,若找到就使用
        2、若方法内部没有需要的变量,去当前类成员变量的位置上查找,若找到就使用
        3、若当前类成员变量的位置上没有需要的变量,去父类中的成员变量的位置上查找,若找到就使用
        4、若上面3个地方都没有找到所需要的变量,就报错

    java中提供了另外一个关键字super,用法跟this很像,但是super代表的是当前子类的直接父类的引用
    在子类中,可以通过super关键字使用直接父类中的非私有成员
点击查看代码
class Fu2{
    int a = 10;
}

class Son2 extends Fu2{
    int a = 20;

    public void fun1(){
        int a = 30;
        System.out.println(a); // 30
        System.out.println(this.a); // 20
//        Fu2 fu2 = new Fu2();
//        System.out.println(fu2.a);
        System.out.println(super.a); // 10


    }
}

public class ExtendsDemo4 {
    public static void main(String[] args) {
        Son2 son2 = new Son2();
        son2.fun1();
    }
}
    super关键字的使用注意事项:
        1、super仅代表当前类中的直接父类,无法使用super获取父类的父类中的成员
        2、super后面不能再调用super
点击查看代码
class GrandFu3{
    int a = 10;
}

class Fu3 extends GrandFu3{
    int a = 30;
}

class Son3 extends Fu3{
    int a = 20;
    public void fun1(){
        System.out.println(a);
        System.out.println(super.a);
//        System.out.println(super.super.a);
        //如果想要获取GrandFu3的成员变量a
        // 需要new一个新对象
        GrandFu3 grandFu3 = new GrandFu3();
        System.out.println(grandFu3.a);
    }
}

public class ExtendsDemo5 {
    public static void main(String[] args) {
        Son3 son3 = new Son3();
        son3.fun1();
    }
}
    继承和构造方法的关系
    在java继承关系中,要想初始化子类,必须先初始化其父类,这里默认super()体现的就是这个意思

    1、子类构造方法的第一句话,默认会有一个super(),对父类做初始化,只能在子类构造方法第一句出现。
    问题:如果父类中没有无参构造方法呢?
        1)使用super关键字调用父类中的有参构造方法,完成父类的初始化
        2)调用当前类中其它有参的构造方法间接对父类做初始化
    2、java中每一个只允许初始化一次
点击查看代码
class Fu4{
//    Fu4(){
//        System.out.println("这是父类中的无参构造方法.....");
//    }

    Fu4(String s){
        System.out.println("这是父类中有参数的构造方法....");
    }
}

class Son4 extends Fu4{
    Son4(){
        //super()
        super("数加");
//        this("数加");
        System.out.println("这是子类的无参构造方法.....");
//        super("数加");
    }

    Son4(String s){
        super(s);
    }
}

public class ExtendsDemo6 {
    public static void main(String[] args) {
        Son4 son4 = new Son4();
    }
}

    继承与成员方法的关系:
    当子类中的方法声明【方法的返回值类型,方法名和参数列表】与父类中的方法声明一致的时候,只是方法的实现不一样,这个现象叫做方法的重写【方法的覆盖】。
    java提供了一个注解帮助我们判断是否是重写@Override
点击查看代码
class Fu5{
    public void fun1(){
        System.out.println("这是父类中的fun1方法");
    }
}

class Zi5 extends Fu5{

    @Override
    public void fun1(){
        System.out.println("这是子类中的fun1方法");
    }


    public void fun2(){
        System.out.println("这是子类中的fun2方法");
    }
}

public class ExtendsDemo7 {
    public static void main(String[] args) {
        Zi5 zi5 = new Zi5();
        zi5.fun2();
        zi5.fun1();
    }
}

重写所需要注意事项:
     1、子类无法重写父类中的私有方法
     2、子类无法继承且重写父类中的静态方法
     3、子类重写方法的权限,要大于等于父类的方法权限,推荐在没有要求的情况下,保持和父亲一致的权限就好了

 面试题:重写和重载什么区别?【overload和override什么区别?】
     1、重写是发生在继承关系中的,指的是子类方法的返回值类型和方法名以及参数列表与父类方法一致,只是实现不一样
     2、重载是发生在同一个类中,值的是方法名一样,参数列表不同,与返回值无关的现象

点击查看代码
class Fu6{
    public void fun1(){
        System.out.println("江川是世界上最帅的男人!");
    }

    void function1(){
        System.out.println("这是父类中默认修饰符的成员方法,...");
    }

    public static void method(){
        System.out.println("这是父类中的静态方法.....");
    }

    private void show1(){
        System.out.println("好好学习,天天向上!");
    }
}

class Zi6 extends Fu6{
    @Override
    public void fun1(){
        System.out.println("吴问强很不服,他认为自己才是世界上最帅的男人!");
    }

    @Override
    void function1(){
        System.out.println("这是子类中默认修饰符的成员方法,...");
    }

    //    @Override
    public static void method(){
        System.out.println("这是父类中的静态方法.....");
    }

    //    @Override
    private void show1(){
        System.out.println("在数加好好学习!");
    }
}

public class ExtendsDemo8 {
    public static void main(String[] args) {
        Zi6 zi6 = new Zi6();
        zi6.fun1();
    }
}

标签:继承,System,class,Extends,println,父类,public,out
From: https://www.cnblogs.com/wangxiaojian-lina/p/18431465

相关文章

  • 第04周 预习、实验与作业:类的设计与继承
    课前问题列表1.为什么说Java中的所有类都is-a Object?在Java中,所有的类都直接或间接地继承自Object类。这意味着,无论在Java中创建什么类,它都是Object类的一个子类(或更具体地说,是Object的某个子类的子类,直到最终的根是Object)。这种设计允许Java提供一个统一的基类,所有类都继......
  • java中关于继承的题目4
    4.请用面向对象的思想,设计自定义类描述演员和运动员的信息设定1)演员类:属性包括:姓名,年龄,性别,毕业院校,代表作方法包括:自我介绍2)运动员类:属性包括:姓名,年龄,性别,运动项目,历史最好成绩方法包括:自我介始要求3)分析演员和运动员的公共成员,提取出父类—人类4)利用继承机制,实现......
  • Java中关于继承的题目3
    3.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精设定1)蛇怪类:属性包括:怪物名字,生命值,攻击力方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)2)蜈蚣精类:属性包括:怪物名字,生命值,攻击力方法包括:攻击,移动(飞行移动)要求1)分析蛇怪和蜈蚣精的......
  • java中关于继承题目2
    2.请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息。设定1)出租车类:属性包括:车型,车牌,所属出租公司;方法包括:启动,停止2)家用轿车类:属性包括:车型,车牌,车主姓名;方法包括:启动,停止要求1)分析出租车和家用轿车的公共成员,提取出父类—汽车类2)利用继承机制,实现出租......
  • java中关于继承的题目1
    编写一个圆类Circle,该类拥有:1)一个成员变量,radius(私有,浮点型);//存放圆的半径;2)两个构造方法Circle() //将半径设为0Circle(double r) //创建Circle对象时将半径初始化为r3)三个成员方法doublegetArea() //获取圆的面积doublegetPerimeter() //获取圆的周长voidshow() //将......
  • java_day7_继承、final关键字、代码块、多态
    一、继承1、继承我想养一只......
  • java继承中方法的覆盖
    当子类中的方法声明【方法的返回值类型,方法名和参数列表】与父类中的方法声明一致的时候,只是方法的实现不一样,这个现象叫做方法的重写【方法的覆盖】。classFu5{publicvoidfun1(){System.out.println("这是父类中的fun1方法");}}classZi5extendsFu5{......
  • java继承关系中super关键字
    super关键字的使用和注意事项:1、super仅代表当前类中的直接父类,无法使用super获取父类的父类中的成员2、super后面不能再调用superclassGrandFu3{inta=10;}classFu3extendsGrandFu3{inta=30;}classSon3extendsFu3{inta=20;publicv......
  • java中的继承关系
    继承是指我有多个类,而且这些类都有相同的属性和方法的时候就可以使用继承关系java提供了一个关键字用来表示继承关系:extends写法:classBextendsA{}表示B类继承自A类这里的B称之为:子类,派生类这里的A称之为:父类,基类或者超类子类只能继承父类的成员变量和成员方法,并且不是私......
  • golang 父类调用子类方法、继承多态的实现方式
    golang父类调用子类方法、继承多态的实现方式-个人文章-SegmentFault思否 实现思路go语言中,当子类调用父类方法时,“作用域”将进入父类的作用域,看不见子类的方法存在(个人想象的)我们可以通过参数将子类传递给父类,实现在父类中调用子类方法。实现方式有两种:一、基于......