木舟0基础学习Java的第八天(面向对象,代码块,继承,this和super)

面向对象OOP

代码块:{在Java中使用花括号括起来的代码叫做代码块}

分类:局部代码块,构造代码块,静态代码块,同步代码块(多线程)

局部代码块:在方法中的代码块 可以使用方法中的局部变量 局部代码块中的变量出了局部代码块就会被释放

构造代码块(初始化块):在类中的方法外出现 多个构造方法中的相同代码存在一起 每次调用构造方法都会执行 并且在构造方法前执行 使用场景(在使用数据库时用来加载数据库的驱动)

静态代码块:在代码块前加上static修饰 用来给类进行初始化 在加载的时候就执行 并且只执行一次 在开发过程中也是用来加载驱动的 优先与构造方法执行

子类加载前会先加载父类进内存

继承Extends:子类(派生类)继承父类(基类)

子类继承父类后 子类会拥有一份和父类一样的数据(属性和方法)
public class Dog extends Animal{
//子类继承父类后 子类会拥有一份和父类一样的数据(属性和方法)
}
public class Animal {
    String name;//名字
    String color;//颜色
    int legs;//腿的数量
    public void cry(){
        System.out.println("叫!");
    }
}
public class Test_Extends {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.name="小黑";
        d.color="黑色";
        d.legs=4;
        d.cry();
        System.out.println(d.name+d.color+ d.legs);
    }
}

继承的好处:提高代码复用性 提高代码的维护性 让类和类之间产生了关系 是多态的前提

继承的弊端:会强加给与子类一些子类不需要的功能 类的耦合性增强

java中类的继承特点:只支持单继承 不支持多继承(一个儿子只能有一个爹)

支持多层继承(子类继承父类,孙类继承子类。。。)最底层的类具备继承体系中的所有功能

私有的属性和方法不能被继承!

继承的注意事项:子类只能继承父类所有的非私有成员(成员属性,成员方法)

子类不能继承父类的构造方法 但是可以通过关键字super访问父类的构造方法

不要为了部分的功能而去继承

开发的原则:高内聚(内聚:自己完成某件事情的能力) 低耦合(耦合:类和类之间的关系)

如果子类中的变量与父类中的变量同名那么 就近原则

this和super的区别:this.成员变量 ,super.成员变量

this代表当前对象的引用 谁来调用我 我就代表谁(可以调用本类的成员变量 也可以调用父类的成员变量)

super代表当前对象父类的引用(只能调用父类的成员变量)

子类中的所有构造方法默认都会访问父类中的空参构造方法( 打印输出的话都是先父类再子类)

因为子类会继承父类中的数据 可能还会使用父类中的数据 所以子类初始化前 一定要先完成父类数据的初始化

每个构造方法的第一条语句默认都是:super()

父类继承与Object Object最顶层的父类

this和super的示例代码:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println(name+"--"+age);
    }
}
public class Student extends Person{
    String classNo;
    public Student (String name, int age){
           super(name,age);//在这调用父类的有参构造
    }

    public Student(String name,int age,String classNo){
        super(name,age);
        this.classNo=classNo;
    }
    public void show(){
        super.show();
        System.out.println(classNo+"--"+sex);
    }
    char sex;
    public Student(String name,int age,String classNo,char sex){
        //第一种方法
     /* super(name,age);
        this.classNo=classNo;
        this.sex=sex;*/
        //第二种方法 提高java代码复用
        this(name,age,classNo);//开发中推荐 调用本类中三个参数的构造方法
        this.sex=sex;
    }

}
public class Demo {
    public static void main(String[] args){
        Student s=new Student("张三",23,"计算机班",'男');
        s.show();
    }
}

重写:子父类中出现了一模一样的方法

重新应用:当子类需要父类的功能 而功能主体子类有自己特有内容时 可以重写父类的方法 这样既沿袭了父类的功能 又定义了子类特有的功能

返回值类型可以是父类也可以是子类

重写代码示例:

public class Phone {
    public void call(){
        System.out.println("打电话");
    }
}
public class Phone3G extends Phone{
    public void sendMsg(){
        System.out.println("发短信");
    }
}
public class Phone4G extends Phone3G{
    public void sendMsg(){
        super.sendMsg();
        System.out.println("发微信");
    }
    public void playGame(){
        System.out.println("打游戏");
    }
}
public class Demo {
    public static void main(String[] args) {
        Phone4G p=new Phone4G();
        p.call();
        p.sendMsg();
        p.playGame();
    }
}

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值