java继承小结

java继承知识点小结

Java继承的概念

继承是面向对象中一个非常重要的特性,通过继承,子类可以使用父类中的一些成员变量和方法,从而提高代码的复用性,提高开发的效率。被继承的类叫做基类或者父类,继承基类或父类的类叫派生类或子类,继承通过关键字extends关键字来实现的。

继承格式

public class 子类名 extend 父类名{}

继承的一些特性

1.java语言不支持多重继承,也就是子类最多只有一个父类,但是可以通过实现多个接口的方式来实现多重继承的目的。
2.子类会继承父类中所有属性和方法,但是父类私有(private)属性和方法不能直接使用,可以通过对父类进行set和get方法来进行使用父类的方法和属性。
3.子类可以覆盖(重写)父类的方法,重写应该满足:a.有继承关系的两个类之间,b.函数名和返回值以及参数类型和顺序应该也是相同的 c.子类的访问修饰符权限应该要大于等于父类的访问权限。当这三个条件有一个不满足时,便不是重写。
4.同样的子类定义的成员变量与父类同名时,子类中的成员变量会覆盖父类的成员变量。

        父类权限为public时,           子类只能是public
        父类权限为protected时          子类只能是public和protected
        父类权限为默认时               子类只能是public和protected和默认
        父类权限为private时            子类只能是public和protected和默认和private 

发生多态的三个前提条件:
1. 继承。多态发生一定要子类和父类之间。
2. 覆盖。子类覆盖了父类的方法。
3. 声明的变量类型是父类类型,但实例则指向子类实例。
即为 :父类 对象=new 子类();
多态发生时,Java虚拟机运行时根据引用变量指向的实例调用它的方法,而不是根据引用变量的类型调用,也就是看new 这边的类重写的方法。
## 类与对象
首先类包含了属性和方法,比如说动物类,它有状态和行为,状态有颜色,名字和品种,而行为的话,有吃饭,睡觉,咬人等等。所以我们可以看成,将类的属性和方法对应于状态和行为。
类中的成员变量有:局部变量和成员变量和类变量。

**局部变量:**定义在方法体(方法,构造方法,语句块)内部的变量,变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
**成员变量:**成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
**类变量:**类变量也声明在类中,方法体之外,但必须声明为 static 类型,因此属于静态变量。

构造方法:

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

> //定义带参构造函数,用于初始化属性 public JueSe1(String name, int blood, int gongji) {
>     this.name = name;
>     this.blood = blood;   
>     this.gongji = gongji; } 
>     //定义无参构造函数
>      public JueSe1() {
> 
> }

创建对象:对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象,如果构造方法里面的运行语句,会运行。如果子类继承父类的情况下,在子类的构造函数里要调用一次父类的构造方法(super(参数)),如果父类有无参构造,默认不写也可以。

父类Person
public class Person {
    private String name;
    private int blood;
    private int gongji;
   //定义带参函数
    public Person(String name,int blood,int gongji){
        this.name=name;
        this.blood=blood;
        this.gongji=gongji;
        System.out.println("父类的构造函数");
    }
子类JueSe1
  public class Juese1 extends Person {
    //子类的构造函数
    //先调用一次父类的构造函数,相当于初始化子类的信息,若有新的属性,再添加即可
    public Juese1(String name,int blood,int gongji){
        super(name,blood,gongji);
        System.out.println("子类1的构造函数");
    }
}
 public class JueSe2 extends Person {
//子类的构造函数
//先调用一次父类的构造函数,相当于初始化子类的信息,若有新的属性,再添加即可
    public JueSe2(String name,int blood ,int gongji){
        super(name,blood,gongji);
        System.out.println("子类2的构造函数");
    }
}
public class Main {
    public static void main(String[] args) {
        Person P1 = new Juese1("后羿", 100, 10);
        Person P2 = new JueSe2("鲁班", 100, 20);
    }
}      
输出:
父类的构造函数
子类1的构造函数
父类的构造函数
子类2的构造函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值