栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象的继承

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象的继承

目录

一.子类 父类

二.继承的特点:

三.Super  超类的引用 (基类 父类)

四.Override 重写 (覆盖)

五.重写和重载的区别?

六.访问修饰符有哪些 作用域

七.多态

八.引用数据类型转换

九. instanceof


一.子类 父类

子类更具体

父类更抽象  

关系 主要使用关键字extends来进行描述两个类之间的继承关系。

二.继承的特点:
  1. 一个父类可以有多个子类,一个子类只能有一个父类
  2. 子类可以使用父类的属性和方法,父类不能访问子类独有的属性和方法
  3. 创建子类对象时要先调用父类的构造方法,然后再调用子类的构造方法。(无参构造)
//父类
public class Person {
    //此类作为父类
    private String name;
    private int age;

    Person(){
        System.out.println("这是一个人");
    }
    private void f(){
        System.out.println("人运动");
    }
}

//子类
public class BasketballPlayer extends  Person{
    //此类作为子类
    BasketballPlayer(){
        System.out.println("这是一个篮球运动员!");
    }
    public void f(){
        System.out.println("篮球运动员打篮球");
    }
}


//测试方法
package Demo;

public class Test {
    public static void main(String[] args) {
        BasketballPlayer plear=new BasketballPlayer();
       plear.f();
    }
}

//结果
这是一个人
这是一个篮球运动员!
篮球运动员打篮球

三.Super  超类的引用 (基类 父类)
  1. 调用父类的构造方法(父类中并未写出无参构造只有有参构造方法此时super()中要有参数,或者是父类中写出两种构造方法而子类中只有有参构造super中可写可不写写出参数,这时候编译器会报错)。
  2. 子类调用父类的同名的方法
//父类

public class Person {
    //此类作为父类
    public String name;
    public int age;

    Person(){
        System.out.println("这是一个人");
   }
    Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void f(){
        System.out.println("人运动");
    }

//子类

package Demo;

public class BasketballPlayer extends  Person{
    //此类作为子类

//    BasketballPlayer(){
//        System.out.println("这是一个篮球运动员!");
//    }
    BasketballPlayer(String name,int age){

       // super(name,age);    
 //此时这里报错There is no default constructor available in 'Demo.Person'
        this.name=name;
        this.age=age;
    }
    public void f(){
        System.out.println("篮球运动员打篮球");
    }
    public void g(){
        System.out.println("这是运动员独有的方法");
    }
}

四.Override 重写 (覆盖)
  1. 1.一定是在两个类中,且两个类必须继承关系
  2. 2.子类和父类都有同名的方法
  3. 3.方法的返回类型、方法的名称、方法的参数列表 相同
  4. 4.方法体不同
  5. 5.子类的方法的访问修饰符 不能比父类更严格
  6. //父类
    
    public class Person {
        //此类作为父类
        public String name;
        public int age;
    
    
        Person(String name,int age){
            this.name=name;
            this.age=age;
        }
        public void f(){
            System.out.println("人运动");
        }
    }
    
    //子类
    
    public class BasketballPlayer extends  Person{
        //此类作为子类
    
    
        BasketballPlayer(String name,int age){
            super();
            this.name=name;
            this.age=age;
        }
        //此方法重写自父类  但是父类为public,而子类为更为严格的权限private,此时这里报错
        private void f(){
            System.out.println("篮球运动员打篮球");
        }
    
    }

    五.重写和重载的区别?

     重载 :一个类  方法名相同 参数列表不同

 public void g(){
        System.out.println("这是运动员独有的方法");
    }
    public void g(String name){
        
    }

 重写 两个类中

方法的返回类型、方法的名称、方法的参数列表 相同

方法体不同

子类的方法的访问修饰符 不能比父类更严格

六.访问修饰符有哪些 作用域

1.Public 公共的  项目中的任意地方都可以访问 修饰类 变量 方法

2.Default 默认的  不写  同包 修饰类 变量 方法

3.Protected 受保护的   子类且同包   修饰变量 方法

4.Private 私有的 只能在本类中访问   修饰变量方法

七.多态

多态:多种形态, 指的是对象的多态 而不是方法的 所以重载不是多态的表现形式。

特点 :父类引用指向子类对象

重写是多态的表现形式之一

父类引用不能够访问子类的独有的属性和方法,但是在调用重写的方法时,会调用子类重写的方法。




public class Animal {

   

    public String name;

    protected int leg;

   

    public Animal() {

       // TODO Auto-generated constructor stub

    }

   

    public Animal(String name,int leg) {

      

       this.name = name;

       this.leg = leg;

       System.out.println("animal");

    }

   

    public void enjoy(){

      

       System.out.println("叫");

    }

   

    public void m(){
      

    }


}




//Dog

package com.openlab.test;



public class Dog extends Animal{


  
    public String eyescolor;

   

    public Dog() {

       // TODO Auto-generated constructor stub

    }


    public Dog(String name,int leg) {

       super(name, leg);

       System.out.println("dog");

    }

   

    public void f(){

       System.out.println("fffffffffff");
  

    }


    public void enjoy(){

      

       System.out.println("旺旺");

    }

}


//Lady

package com.openlab.test;



public class Lady {


    public String name;

    public int age;


    public Lady(String name,int age) {

       this.name = name;

       this.age = age;

    }
   
    public void petenjoy(Animal a){

       a.enjoy();

    }

}

//Test


public class Test {

   

    public static void main(String[] args) {

      // 父类引用指向子类对象

       Animal a = new Dog("大黄",4);

       Animal aa = new Cat();

      

       Lady lili = new Lady("lili", 11);

      

       lili.petenjoy(a);

     

    }


}

八.引用数据类型转换

向上转型,向下转型

  • 大转小 强制转换
  • 小转大 自动转换
 Animal a = new Dog("大黄",4);

       Animal aa = new Cat();

      

       Dog d = (Dog) a;

九. instanceof

前面的对象是否属于后面的类型

报错:java.lang.ClassCastException

类型转换异常

if (c instanceof Cat) {



      System.out.println("true");

      

    }else{

        System.out.println("false");

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号