首页 > 编程语言 >【JavaWeb从入门到精通系列】 - JavaSE基础篇(1) -面向对象

【JavaWeb从入门到精通系列】 - JavaSE基础篇(1) -面向对象

时间:2024-09-21 19:50:55浏览次数:3  
标签:JavaWeb 构造方法 子类 方法 面向对象 Student JavaSE 父类 super

一、封装

1、存在意义

public对属性的设置或者修改没有任何限制

隐藏该隐藏的,暴露该暴露的。

封装之后设置set和get方法

2、封装

//1、将需要封装的属性修饰符设置为private(私有的,在外界无法访问)
private int age;// 年龄
//正常情况下通过创建对象可以访问属性
Student stu1 = new Student(); 
stu1.age; //错误
//封装属性之后,不能直接使用了,需要通过方法使用
//2、因此在自定义Student类中提供set和get方法(右击生成)
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
//3、通过对象调用自定义类方法实现属性设置和获取
	   Student s = new Student();
        //set设置
        s.setAge(20);
	   //get获取
        System.out.println(s.getAge());

二、继承

1、存在意义

数据冗余,维护不方便

写好的类无法扩展,多个对象调用同一个类,不能够满足所有需要

2、定义

1、Java为单继承,程序中的继承,是类与类之间特征和行为的一种赠与或获得。

2、提高了代码的复用性和可扩展性

3、两个类之间的继承关系,必须满足is a的关系。

4、在实际开发中,可根据程序需要使用到的多个具体类,进行共性提取,进而定义父类。

5、被继承的类称为父类,继承的类称为子类

6、子类继承父类时,构造方法不会被继承。

//父类的定义 正常的类
[修饰符] class 父类名{
    //属性
    //构造方法
    //方法
}
//子类的定义            单继承
[修饰符] class 子类名 extends 父类名{
    //属性  子类自己的
    //构造方法
    //方法
    
}  

//产生继承关系之后,子类可以使用父类中的属性和方法,也可以定义子类独有的属性和方法。
//一个类的父类是可以有父类的 - 一个类可以有多个间接父类,多级继承
//Object类是所有类的“父类” - 直接、间接

3、方法重写

1、方法之间的关系有两种:方法重载(同一个类里面)和方法重写(子类和父类)

2、父类中的方法不能满足子类的要求 - 子类重写一个方法覆盖父类的方法

3、要有继承关系才能重写,重写方法的三要素和父类完全相同 (返回值类型、方法名、参数列表),访问修饰符可与父类相同或是比父类更宽泛。

4、子类重写父类方法后,子类调用时优先执行子类重写后的方法

5、@Override - 编译器帮助我们检查方法是否是重写正确

4、super关键字

//如果父子类的属性或方法存在重名(属性遮蔽、方法重写)时,需要加以区分
//代表父类对象 super关键字可在子类中访问父类的方法。
super.属性 
super.方法()
    
//代表父类的构造方法 首行
super()      //表示调用父类无参构造方法,如果没有显式书写,隐式存在于子类构造方法的首行。
super(...)    //在子类中调用父类有参的构造方法

5、super和this

// 区分父类属性、子类属性、局部变量
父类属性 super.属性名
子类属性 this.属性名
局部变量 局部变量名   
//同名同类型情况下被调用优先性
    局部 子类本身 父类

//this和super不能同时存在于子类构造方法中,因为super方法会创建父类对象,但是this又代表了子类构造方法,所以会致使多次创建父类对象
//this或super使用在构造方法中时,都要求在首行。
//当子类构造中使用了this()或this(参数),就不可再同时书写super()或super(参数),
//可以使用this调用当前类的构造方法,构造方法内含有默认无参或者显式有参的super(...),以此来由this()指向的构造方法完成super()的调用:
//子类中
public Student(String name, int age, String gender, String addr) {
        //super();
        super(name,age,gender,addr);  //调用父类的构造方法
}
public Student(String name, int age, String gender, String addr, String school) {
    this(name,age,gender,addr); //调用子类的构造方法,目的是super()
    this.school = school;   //子类特有的属性
}

//测试类
Student student1 = new Student("父类", 20, "z", "z", "z");
System.out.println(student1);

6、访问控制修饰符

public 本类 同包 非同包子类 其他
private 本类  
default 本类 同包    //不写修饰符,默认
protected 本类 同包 非同包子类    

7、初始化的顺序

//继承中对象创建
  1. 单个对象初始化(没有继承)的顺序:
      1) 属性初始化
      2) 调用构造方法
  2. 存在继承关系的初始化的顺序:
      1) 父类属性初始化
      2) 父类构造方法
      3) 子类属性初始化
      4) 子类构造方法

三、多态

1、存在意义

当存在多个子类,main方法需要使用各个子类的内部特有的方法或者各自重写的父类的方法时,一个个调用会很麻烦而且代码繁多

编译和运行时呈献不同的状态 ===> 多态

使用父类作为方法形参实现多态,使方法参数的类型更为宽泛

使用父类作为方法返回值实现多态,使方法可以返回不同的子类对象

2、定义

//1. 如何实现多态:
//父类引用指向子类对象/子类对象赋值给父类引用
基于父类的多态
    Person p1 = new Student();
    Person p2 = new Teacher();
//1)父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法;
//2)子类对象赋值给父类引用,如果运行被重写的方法,实际运行的是子类中的方法

//2、多态的细节:
//1) 编译时,看左边,左边有的方法才能调用
//2) 运行时,看右边,右边实际是什么类型就调用该类型的方法    

3、基于接口的多态

//接口的引用指向实现类的对象/实现类的对象赋值给接口的引用
Vehicle v1 = new Car();
//接口作为方法的参数
//接口作为方法的返回值

4、向上或向下转型

//向上转型
//将子类对象的引用赋值给父类类型的变量。
//向上转型是自动进行安全的,因为子类对象是父类类型的实例。
//目的:使父类引用能够指向子类对象,从而可以调用父类中定义的方法,或者通过父类引用访问子类对象。
Person p1 = new Student();
p1.eat();

//向下转型
//将父类类型的引用转换为子类类型。
//需要显式类型转换,如果父类引用中的子类对象类型和目标类型不匹配,则会发生类型转换异常(ClassCastException)。
//目的:访问子类特有的属性和方法。
Person ps = new Student();   //实际上这里已经进行了向上类型转换
Student s = (Student) ps;
s.study();
//总结来说,向下转型并不一定需要先进行向上转型,但向下转型确实发生在父类引用已经指向子类对象的情况下。
//向下转型的前提条件是父类引用实际上指向的是子类的对象。如果父类引用没有指向正确的子类对象,那么向下转型将会导致 ClassCastException。
//注意:
    类型安全:确保父类引用确实指向了一个子类对象。
    类型检查:在进行向下转型之前,可以使用 instanceof 操作符来检查对象是否是特定子类的实例。
        //如何判断p到底是教师还是学生
        // (对象/引用 instanceof 类型)  检查是否是类的对象
        Person ps = new Student();
        if(ps instanceof Teacher) {
            Teacher t = (Teacher) ps;
            t.teach();   //调用其特有的方法  Teacher teach   
            //p.eat();
        } else if(ps instanceof Student) {
            Student s = (Student) ps;
            s.study();      // Student study
        }        

标签:JavaWeb,构造方法,子类,方法,面向对象,Student,JavaSE,父类,super
From: https://blog.csdn.net/weixin_59096017/article/details/142422655

相关文章

  • JAVA——面向对象
    面向对象介绍面向对象的概念面向:拿、取对象:能干活的东西面向对象就是拿对应的东西来做相应的事情面向对象抽象理解洗衣服用到洗衣机、扫地用到扫地机器人因此会更方便JAVA中的面向对象在哪里体现?若想生成一个随机数,我们会使用random若想输入,我们会使用scanner............
  • 基于JavaWeb的原神游戏商城的设计与实现
    目录博主介绍:......
  • java--章面向对象编程(高级部分)
    类变量和类方法类变量类变量内存布局什么是类变量类变量也叫 静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。如何定义类变量定义语法:访问修饰符static......
  • JavaSE——String类
    一、字符串构造注意:String是引用类型,内部并不存储字符串本身。有三种方式:publicclassTest1{publicstaticvoidmain(String[]args){//使用常量串构造Strings1="hellojava";System.out.println(s1);//直接newString......
  • JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密
    通过Tomcat进行发布项目的目的是为了提供项目的访问能力:Tomcat作为Web服务器,能够处理HTTP请求和响应,将项目的内容提供给用户进行访问和使用。一.Tomcat发布项目的三种方式:第一种:直接在Tomcat文件夹里的webapps目录创建一个文件夹new放进html文件。f在文件里可以写简单的网......
  • Python面向对象编程
    Python-面向对象:类、对象、属性、方法面向对象概念面向对象编程(Object-orientedProgramming,简称OOP),是一种封装代码的方法面向对象:将模拟真实世界里的事物(对象)和描述其特征(属性)的数据和函数代码块(方法)封装到一起(类)类:可以理解是一个模板,通过它可以创建出无数个具体实例对象:类并......
  • ssm基于javaweb的疫情管理系统的设计与实现
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取源码请私聊我需要定制请私聊目录摘要 IAbstract II第1章绪论 11.1研究背景及意义 11.2研究内容 1第2章开发环境与技术 32.1Java语言 32.2MYSQL数据库 3......
  • 面向对象设计
    在现实世界中,万事万物皆对象。例如,一支铅笔、身边的同学、一辆汽车、这些都可以称为对象。这些对象也都有自己的特征和行为。例如,铅笔的颜色是黄色,长度是10厘米,可以用来写字、画画等;其他同学有姓名、性别和身高等,可以和我们一起学习、玩游戏等。同样,在程序的世界里,也有对象。另外,......
  • JavaSE——多线程基础
    概述        现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时允许多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。    CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操......
  • Java面向对象编程(OOP)的四个主要特征
    目录1.封装(Encapsulation):2.继承(Inheritance):3.多态(Polymorphism):4.抽象(Abstraction):Java面向对象编程(OOP)有四个主要特征:封装、继承、多态和抽象。这些特性是OOP的核心概念,帮助构建灵活、可维护的代码结构。1.封装(Encapsulation):封装是将对象......