首页 > 编程语言 >Java面向对象进阶学习一

Java面向对象进阶学习一

时间:2024-11-06 19:19:48浏览次数:3  
标签:Java 进阶 子类 age 面向对象 void 父类 public name

this关键字

使用this使用的变量时属性,没有使用的是形参

this可以调用结构,成员变量,方法

this的理解,当前对象(在方法中调用时),或 当前正在创建的对象(在构造器中调用时)

针对方法内的使用情况

一般情况下,我们通过对想a调用方法,可以在方法内调用当前对象a的属性或其他的方法,此时,我们可以在属性和方法前使用this.表示当前属性或方法所属的对象a,但是一般情况下,我们为您都可以省略this.

代码如下:

public class personTest {
    public static void main(String[] args) {
        person p1 = new person("SDJ",'男');
        p1.setage(18);
        System.out.println(p1.age);
        person p2 = new person(14,'男');
        System.out.println(p2.age);
    }
}
 class  person{

    String name;
    int age;
    char gender;
    public person(String name,char gender ) {
        this.name = name;
        this.gender = gender;
    }
    public person(int age,char gender) {
        this.age = age;
        this.gender = gender;
    }
    public void setage( int age) {
        this.age = age;
    }
    public int getage() {
        return this.age;//其中的this.可以省略不写
    }
    public void eat(){
        System.out.println("吃饭");
        this.sleep();//this调用方法
    }
    public void sleep(){
        System.out.println("睡觉");
    }
}

​​​​​​this调用构造器

格式:this(形参列表);

注意:必须声明在当前构造器的首行(所以在一个构造器中只能声明一个构造器)

代码如下;

public class UserTest {
    public static void main(String[] args) {
        User u1 = new User("name",10);//只创建了一个对象
    }

}
class User {
    String name;
    int age;
    public User() {
        //模拟对象创建时,需要初始化50行代码
    }
    public User( String name) {
        this();//调用前面的构造器
       this.name = name;
    }
    public User( String name, int age) {
        this(name);//调用前面的构造器
        this.age = age;
    }
}

继承性

继承的理解:

1.自上而下:定义一个类A,在定义另一个类B时,发现类B的功能与类A相似,考虑类B继承与类A

2.自上而下; 定义了类B,C , D有相似的属性和方法,可以考虑将相同的属性和方法进行抽取,封装到类A中,让类B , C , D继承与类A,同时,B , C , D中相似的功能就可以删除了。  

继承性的格式

格式

class A{

//属性,方法

}

class B extends A{

}

继承性的基本概念

类A :  父类 , superClass , 超类,基类

类B:子类,subClass,派生类

方法的重写

1.为什么要需要方法的重写?

子类在继承父类以后,就获取了父类中声明的所有方法,但是父类中的方法可能不太适合与子类,换句话来说,子类需要对父类中继承过来的方法覆盖,覆写的操作。

2.何为方法的重写?

对子类继承过来的方法进行覆盖,覆写的操作,就成为方法的重写

举例:

class Account{//账户

        double balance;、

        //取钱

         public void withdraw(double amt){

        //判断balance余额是否够amt取钱的额度

        }

}

class ChackAcount extends Account{

        double protectedBy;//透支额度

        public void withdraw(double amt){

        //判断balance余额是否够amt取钱的额度

        //如果不够,还可以考虑从prtectedBy额度里取钱

        }

}

class AccountTest{

        public ststic void main(String[] args){

        CheckAccount acct = new CheckAccount

        acct.withdraw();//执行的是子类重写父类的方法

        }

}

具体规则

一.父类被重写的方法与子类重写的方法名和形参列表必须相同

二.子类重写的方法的权限修饰符不小于父类被重写的权限修饰符

  >子类不能重写父类 中声明为private权限修饰的方法

三.关于返回值类型:

  >父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型必须是void

  >父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型必须与被重        写的返回值类型相同

  >父类被重写的方法的返回值类型是引用数据类型(如类),则子类重写的方法的返回值类型可以与被重写的方法相同,或是被重写方法的子类

super

代码如下:Person类

public class Person {
    //父类构造器
    public Person() {
        System.out.println("Person constructor");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
 System.out.println(name+"  "+age);

    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //属性
    String name = "beida";
    private int age;
    int id = 101;//身份证号
    //方法
    public void eat(){
        System.out.println("人吃饭");
    }
    public void sleep(){
        System.out.println("人睡觉");
    }
    public void doSport(){
        System.out.println("人运动");
    }
}

Student类:

public class Student extends Person {
    //String name = "qinghua";
    int id = 102;//学号
    public void eat(){
        System.out.println("学生要好好吃饭");
    }
    public void sleep(){
        System.out.println("睡觉要好");
    }
    public void show(){
        eat();
        super.eat();
    }
    public void show1(){
        doSport();
        this.doSport();
        super.doSport();
    }
    public void show2(){
        System.out.println(id);//就近id为102,相当于this.
        System.out.println(super.id);//101
    }
    public void show3(){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
    //子类构造器调用父类构造器
    public Student(){
        super();
        System.out.println("Student constructor");
    }
    public Student(String name,int age){
        //setAge(age);//这样也可以使用父类中的get,set方法进行给父类赋值
        //super.name = name;
        super(name,age);//直接用构造器给父类的属性赋值
    }
}

StudentTest类:

public class StudentTest {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.eat();
        s1.sleep();
        s1.show();
        s1.show2();
        s1.show3();
        System.out.println(s1.name);//直接调用了服了的属性
        //测试子类调用父类u构造器
        Student s2 = new Student();
        Student s3 = new Student("tom",23);

    }
   

}

子类实例化的全过程

1.从总结果的角度来看,体现为继承性

当我i们创建子类对象后,子类对象就获取了器父类中声明的所有属性和方法,在权限允许的情况下,可以直接调用

2.从过程角度来看

当我们通过子类的构造器创建对象时,子类的构造器一定会直接或间接的调用到其父类的构造器,而其父类的构造器同样会直接或间接的调用但其父类的构造器,.......直到调用了Odject类的构造器为止。

正因为我们调用过子类所有父类的构造器,所以我们就会将父类中声明的属性,方法加载到内存中,供子类对象使用。

在创建子类对象的过程中,一定会调用父类中的构造器

在创建子类对象的时候,内存中只有一个对象(因为只new了一个对象)

标签:Java,进阶,子类,age,面向对象,void,父类,public,name
From: https://blog.csdn.net/2401_87232884/article/details/143465297

相关文章

  • 0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器
    0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器、计算函数运行时间面向对象--可迭代实现方法面向对象--迭代器实现方法call方法作用call方法实现装饰器代码演示计算函数运行时间代码演示面向对象–可迭代把对象看做容器,存储......
  • 5.Java 数组(一维数组、二维数组、数组实例实操)
    一、数组1、基本介绍【数据类型】[]【数组名】=new【数据类型】[【长度】];【数据类型】[]【数组名】={【元素1】,【元素2】...};【数据类型】[]【数组名】=new【数据类型】[]{【元素1】,【元素2】...};数组中的元素可以是任何数据元素,包括基本类......
  • LeetCode100之接雨水(42)--Java
    1.问题描述        给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。        示例1输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下......
  • 【Java SE语法】抽象类(abstract class)和接口(interface)有什么异同?
    目录1.抽象类与接口的基本概念1.1 抽象类1.2接口2.抽象类与接口的异同2.1相同点2.2不同点3.拓展知识:多态与设计模式3.1多态3.2设计模式4.结论        在软件工程中,设计模式和代码结构的选择对于构建可维护、可扩展的系统至关重要。抽象类(Abstrac......
  • Java网络安全常见面试题
    列举常见的WEB攻击,及解决方案一、SQL注入1、什么是SQL注入攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。2、如何预防SQL注入使用预编译语句(Prepa......
  • Java键盘录入
    键盘录入next()、nextLine()可以接受任意数据,但是都会返回一个字符串;nextInt()只能接受整数,键盘录入小数或者其他字母,就会报错;nextDouble()能接收整数和小数,但是都会看做小数返回,录入字母会报错。注意:next()、nextInt()、nextDouble()在接收数据的时候,会遇到空格,回车,制表符......
  • java计算机毕业设计基于的大学宿舍管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着大学教育的不断发展,高校规模日益扩大,学生数量不断增加,传统的宿舍管理方式面临着巨大的挑战。传统的手工登记和管理模式存在效率低下、信息容......
  • java计算机毕业设计最优网络购票系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,网络购票系统在现代社会中的应用日益广泛。在交通、娱乐等多个领域,人们对于便捷、高效的购票方式需求不断增加。传统的购......
  • 使用 【Java】 集成 【Elasticsearch】:详细教程
    Elasticsearch是一个开源的分布式搜索引擎,它能够快速地存储、搜索和分析大量的文本数据。它基于ApacheLucene构建,广泛应用于日志分析、全文搜索、推荐系统等场景。本文将详细介绍如何在Java项目中集成Elasticsearch,包括如何配置、索引文档、查询数据、以及与Elasticsea......
  • 基于Java的家庭理财系统app设计和实现
    目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......