首页 > 编程语言 >木舟0基础学习Java的第九天

木舟0基础学习Java的第九天

时间:2024-07-03 21:27:46浏览次数:22  
标签:第九天 Java 木舟 子类 void 多态 抽象类 父类 public

面向对象OOP

final(最终的):用final修饰的 所以变量名必须大写

修饰类:类不能被继承

修饰变量:变量就变成了常量只能被赋值一次

修饰方法:方法不能被重写

多态(polymorphic)

多态的前提:

                  1.有继承关系

                  2.有方法重写//在多态中编译时会检查父类中是否有被重新的方法

                  3.有父类的引用指向子类对象

示例代码:

public class Animal {//父类
    String colour="黑色";
    public void eat(){
        System.out.println(colour+"动物吃饭");
    }
}
public class Cat extends Animal{//继承父类
    String colour="白色";
    public void eat(){//重写父类eat()方法
        System.out.println(colour+"猫吃鱼");
    }
}
public class Demo {
    public static void main(String[] args){
        Animal c=new Cat();//父类的引用指向子类对象
        c.eat();
    }
}

成员变量:编译看父类 运行看父类

成员方法:编译看父类 运行看子类(动态绑定)

静态方法:编译看父类 运行看父类 (算不上重写 访问的还是父类 当成普通类就好)

多态的好处:提高代码的维护性(继承保证)提高代码的拓展性(多态保证)

多态的弊端:在多态当中父类的引用不能调用子类特有的属性和方法(解决方法强转:向上转型,向下转型)

向下转型:

public class Person {
    String name;
     public void eat(){
         System.out.println("吃饭");
     }
     public void drink(){
         System.out.println("喝水");
     }
    public void sleep(){
        System.out.println("睡觉");
    }
}
public class Muzhou extends Person{
    public void study(){
        System.out.println(name+"学习");
    }
    public void playGame(){
        System.out.println(name+"打游戏");
    }
    public void eat(){
        System.out.println(name+"吃饭");
    }
    public void drink(){
        System.out.println(name+"喝水");
    }
    public void sleep(){
        System.out.println(name+"睡觉");
    }
}
public class Demo {
    public static void main(String[] args) {
        Person p=new Muzhou();
        p.name="木舟";
        //多态中 成员方法 编译看父类 运行看子类
        p.eat();//木舟吃饭
        p.drink();//木舟喝水
        p.sleep();//木舟睡觉
        //p.study();//报错 多态当中父类的引用不能调用子类特有的方法
        //p.playGame();//报错 多态当中父类的引用不能调用子类特有的方法
        Muzhou m=(Muzhou)p;//向下转型
        m.study();//木舟学习
        m.playGame();//木舟打游戏
    }
}

抽象类(abstract):

抽象类特点:抽象类和抽象方法 必须用abstract关键字修饰

抽象类的成员特点:

                              1.成员变量:(既可以是变量也可以是常量)abstract 只能修饰类或者方法 不能                                                     修饰成员变量

                              2.构造方法:用于子类访问父类的初始化

                              3.成员方法:既可以是抽象的(强制要求子类做的事情)也可以是非抽象的                                                           (子类继承的事情)【一般开发中抽象类只写抽象方法】

抽象类不一定有抽象方法 有抽象方法的类一定是抽象类或者是接口

抽象类中可以没有抽象方法 但是没有意义 与抽象类的初衷有冲突

抽象方法没有实现 也就是说没有{}

抽象类不能被实例化 只能用多态的方式去实例化 (抽象类多态)子类实例化需要向下转型

抽象类的子类 要么是抽象类 要么重写抽象类中的所有抽象方法

抽象类中提供了一个标准 强制子类重写抽象方法

抽象类中可以有普通成员方法

abstract 不能与 static final private共存

static

被abstract修饰的方法没有方法体 没有具体实现方法

被static修饰的可以用类名.调用 但是类名.调用抽象方法没有意义

final

被abstracrt修饰的方法强制子类重写

被final修饰的不让子类重写 所以它俩矛盾

private

被abstract修饰是为了让子类看到并强制重写

被private修饰是不让子类访问 所以它俩也矛盾

接口(interface)

接口中的方法全部都是抽象的

接口写法:interface 接口名{}

实现接口:

public interface Inter {
    abstract void print();
}
public class Demo implements Inter{//用 implements 实现接口
    @Override
    public void print() {
        System.out.println("print");
    }
}

接口也不能被实例化 只能用多态的方式去实例化

接口的子类可以是抽象类 不能实例化 需要抽象类的子类 用多态的方法才能实例化

public interface Inter {
    public  void print();//会隐式自动加上 abstract
    int a=10;//接口里定义的变量都会变成常量 底层会自动加上public static final
    //一般接口中很少申明变量
}

标签:第九天,Java,木舟,子类,void,多态,抽象类,父类,public
From: https://blog.csdn.net/tzh525/article/details/140092617

相关文章

  • 基于java的厨房达人美食分享平台
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......
  • 基于java的大学生在线论坛
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......
  • MRCTF 2022 EzJava
    MRCTF2022EzJava题目分析下载附件得到一个jar包和一个waf配置文件。如果只是为了本地搭建环境,直接启动jar包就行了,但是如果需要进行远程调试就需要进行一些配置(这个网上教程很多),这个调试也要看具体需求,能直接打通的话就不需要调试。但是不管怎么说,第一步肯定都是先解压......
  • 基于java的厨房达人美食分享平台
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......
  • 基于java的大学生在线论坛
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......
  • 基于java的儿童慈善管理系统
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......
  • Java 基本数据类型和引用数据类型有什么区别?
    在Java世界里,数据类型是构建程序的基石,它们决定了变量可以存储什么类型的值以及如何操作这些值。Java的数据类型大致可以分为两大类:基本数据类型(PrimitiveDataTypes)和引用数据类型(ReferenceDataTypes)。理解它们之间的区别,对于编写高效、健壮的Java代码至关重要。现在,我们......
  • Java 中的主方法( main 方法)签名是什么?为什么主方法必须是静态的?
    在Java中,主方法(main方法)是每个应用程序的起点,是Java虚拟机(JVM)调用的第一个方法。它的签名是固定的,必须符合以下格式:1publicstaticvoidmain(String[]args)这个签名包含了几个关键的部分:public:表明这个方法是公开的,可以从任何地方被调用。static:表示这是一个静态方法,意味......
  • 【JavaScript脚本宇宙】高效Web开发利器:全面解析六大HTML解析器与DOM库
    精益求精:揭秘六个改变Web开发的HTML解析与DOM操作工具前言在现代Web开发中,HTML解析器和DOM操作库是不可或缺的工具。无论是爬取数据、处理复杂的HTML文档,还是模拟浏览器环境,这些工具都扮演着关键角色。本文将深入探讨六个广泛使用的HTML解析器和DOM操作库,它们分别是:htmlpa......
  • 【Java基础】--线程(包含面试题)
    本章主要了解什么是进程?进程和线程有什么关系?有什么区别?以及创建线程的方式有哪些?1.什么是进程?简单的来说,进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存。2.什么是线程?线程,又称轻量级进程(LightWeightProcess)。......