Java基础--继承、构造器、重载重写

一、继承

        1、继承的概念

        继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
        多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类、超类或者基类。子类可以直接访问父类中的非私有的属性和行为。通过extends关键字让类与类之间产生继承关系。

        2、继承举例(子类extends父类)


        创建person    创建student类继承person类

public class Person {
    public Double height;
    public String name;
    public void run(){
        System.out.println("run");    
    }
    public void a(){
        System.out.println("aaaa");    
    }
}
public class student extends Person{
    public void study(){
        System.out.println("study");    
    }
}
public class Test  {
    public static void main(String[] args){
        Student student = new Student();
        student.run();
        student.a();
        student.study();
        student.height = 180.0;
        
        Person person = new Person();
        person.study();   //这一行报错,父类不能用子类的方法
    }
} 

        继承的本质就是代码的复用,子类可以使用父类的代码,而子类是不能调用父类的代码。

        3、继承特点:

1、不能互相继承(a继承b,b继承a,不对!);

2、一个类可以被多个类当父亲(一个父类可以有多个子类),但是一个子类只能有一个父类(父亲唯一),(java仅支持单继承)

补充:修饰符比较

本类子类同包不同包
public可以访问可以访问可以访问可以访问
protected可以访问可以访问可以访问无法访问
不写可以访问可以访问可以访问无法访问
private可以访问无法访问无法访问无法访问

二、构造器

        1、普通方法

1.方法是有访问权限的

2.方法必须写上返回数据的类型,如果不需要返回数据就写void

        方法创建

void study(){
        System.out.println("study"); 
        return;   
   }  
private int age(){
    return 18;
}       

3.在同一个类当中,方法名可以相同但是方法的签名不能相网(方法的签名=方法名+参数列表的类型)

4.方法上可以使用其他的关键字进行修饰,比如static利final,它们有不同的意义。

举例:

public class student{
    public void study(){
        System.out.println("study");    
    }            //合理
    public void study(int age){
        System.out.println("study");    
    }            //合理
    public void study(String age){
        System.out.println("study");    
    }           //合理,类型不同
    public void study(int name){
        System.out.println("study");    
    }           //不合理,与第二个发生冲突,都为int类型
}

       

         2、构造函数(构造器)(创建对象时给对象的变量赋初始值)

1、在类中构造函数必须和类名相同;
2、在类中有一个默认不显示的无参数的构造器,一旦你在类中写了一个构造器,无参构造器就会被覆盖。
3、构造器不需要写返回类型
4、一个类中可以有多个构造函数

举例

public class A {
    public Double height;
    public int age;
    public String name;
    public A(String name){
        this.name = name;    
    }                      //自己写的构造器
    public A(String name,int age){
        this.name = name;
        this.age = age;    //自己写的构造器
    } 
}
public class B {
    public static void main(String[] args){
        A a = new A();   //如果是默认无参构造器这样写是对的
        A a = new A("张三"); //自己设置了构造器后   
    }
}

三、重载与重写

        1、重载(在同一个类当中方法名相同但是参数列表不同)

        重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

public class a{
    public void study(int age){   
    }            
    public void study(String age){   
    }           
    public void study(int name){   
    } 
}     
         2、重写(发生在父子类中,子类重新实现父类的方法功能。)

        在复用的过程中父类方法的实现不一定适用于子类,此时需要用到重写。
        重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 即外壳不变,核心重写!

        举例:

public class A{
    public void run(){ 
        System.out.println("axuexi");  
    }            
}  
public class B extends A{
    public void run(){ 
        System.out.println("bxuexi");  
    }            
}  
public class text {
    public static void main(String[] args){
       B b = new B();
       b.run();      //此时为bxuexi  
    }
}

运行过程如下:
        扫描找main方法,Test.java编译为Test.class进入方法区,main方法入栈。在扫描b,发现b的父类为a,在扫描a(a无父类),将a编译进入方法区,在将b编译调入。
        new生成子类b对象时要先生成父类a对象。子类对父类的run方法重写,调用时优先调用自身重写后的run方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值