当前位置: 首页 > 后端技术 > Java

Java笔记(四)

时间:2023-04-02 01:27:30 Java

继承与多态一、继承1.继承概述继承是面向对象的三大特征之一。可以让子类拥有父类的属性和方法,也可以在子类中重新定义和添加属性和方法。继承格式:publicclasssubclassnameextendsparentclassname{}例:publicclassZiextendsFu{}Fu:是父类,也称基类,超类。Zi:是子类,也叫派生类。继承中子类的特点:子类可以有父类的内容,子类也可以有自己独有的内容。继承的好处:提高代码的复用性(多个类的同一个类的成员可以放在同一个类中)提高代码的可维护性(如果方法的代码需要修改,只修改一个地方)继承的缺点:继承创建了一个类之间的关系。增强了类的耦合。当类发生变化时,子类的实现也要随之变化,削弱了子类的独立性。什么时候使用继承?继承体现的关系:是一个假设的方法:我有两个类A和B,如果它们满足A是B的类型,或者B是A的类型,就说明它们有继承关系。这时候可以考虑用继承来体现。否则不能滥用继承例子:applesandfruits,catsandanimals,catsanddogs2.super关键字super关键字的用法类似于this关键字的用法this:表示对此类对象super的引用:表示存储父类空间的标识符(可以理解为父类对象引用)关键字访问成员变量访问构造函数访问成员方法thisthis。成员变量,访问本类成员变量this(..),访问本类构造方法this。成员方法(..),访问成员方法supersuper。本类成员变量,访问父类成员变量super(..),访问父类构造方法super。成员方法(..),访问父类成员方法3.构造方法的继承访问特性子类中的所有构造方法默认都会访问父类中的无参构造方法。为什么?●因为子类会继承父类中的数据,但也可以使用父类的数据。所以在初始化之前,必须先完成父类数据的初始化。每个子类构造方法的第一条语句默认为:super()如果父类中没有无参构造方法,只有带参数的构造方法呢?使用super关键字显式调用带有父类参数的构造函数。在父类中提供无参构造函数。建议:自己给无参构造函数4.方法重写概述方法重写●方法重写在子类中的应用与在父类中完全一样。当子类需要父类的功能,而功能主体子类有自己独特的内容时,可以重写父类中的方法。这样,即继承了父类的功能,定义了子类的具体内容。实践:手机类和新手机类@Override。它是一个注释(稍后您将了解注释)。它可以帮助我们检查重写方法的方法声明。正确方法重写注意事项:私有方法不可重写(父类的私有成员不能被子类继承)子类方法访问权限不能低(public>default>private)5、Java中继承的注意事项Java中的类只支持单继承,不是多继承。例如:publicclassSonextendsFather,Mother{}是错误的。Java中的类支持多级继承。6.package的概述和使用package:package其实就是一个文件夹,作用:对类进行分类和管理。包定义格式:package包名;(多级包以.分隔。)示例:packagecom.itheima;编译执行带包的Java类手动构建包:按照前面的格式编译java文件:javacHelloWorld.java手动创建包:在E盘创建一个文件夹com,然后在com下创建一个文件夹itheima,放class文件在包的最里面:把HelloWorld.class文件放在com.helloworld.class文件夹下。与包一起执行:javacom.itheima.HelloWorld自动建包:javac-d.HelloWorld.javajavacom.iheima.HelloWorld7.import导入包概述及使用:使用不同包下的类时,写的时候需要写上类的完整路径,即写起来太复杂了麻烦,为了简化包的操作,Java提供了导入包的函数包的格式:format:importpackagename;示例:导入cn.itcast.Teacher8。权限修饰符同类可以访问的修饰符:private;默认;受保护;同包中的公共子类无关类:默认;受保护;不同包中的公共子类:protected;基本类型的数据值不能改变。变量是引用类型:final修饰是指不能改变引用类型的地址值,但是可以改变地址中的内容。staticstatic关键字表示static,可以修饰成员方法。静态修饰成员变量的特点:●类的所有对象共享这也是我们判断是否使用static关键字的条件●可以通过类名调用当然也可以通过对象名调用它推荐使用类名调用静态访问特性:非静态成员方法可以访问静态成员变量可以访问非静态成员变量可以访问静态成员方法可以访问非静态成员方法静态成员方法可以访问静态成员量可以访问静态成员方法可以用一句话来概括:静态成员方法只能访问静态成员2.多态1.多态总结了同一个对象在不同时间的不同形式例子:猫我们可以说猫是猫:猫猫=新猫();我们也可以说猫是动物:animalanimal=newcat();在同一时刻表现出不同的形式,这是多态性的前提和体现。●存在继承/实现关系。●有方法重写。转变:从孩子到父母;父类引用指向子类对象(2)向下转化:从父类到子类;父类引用转换为子类对象看左边的成员方法:编译看左边,执行看右边。为什么成员变量和访问成员方法不同?因为成员方法被覆盖了,但是成员变量没有。3、多态的优缺点●多态的好处:提高程序的扩展性具体体现:在定义方法时,使用父类型作为参数,在方法中使用时,使用具体的子类型参与运算未来。多态的缺点:不能使用子类特有的功能4.抽象类在Java中,没有方法体的方法应该定义为抽象方法,如果一个类中有抽象方法,则该类必须是定义为抽象类(1)抽象类的特点抽象类和抽象方法必须用abstract关键字修饰publicabstractclassname{publicabstractvoideat0;抽象类不一定有抽象方法,有抽象方法的类一定是抽象类抽象类不能实例化如何实例化抽象类?指的是多态方法,通过子对象实例化,称为抽象类多态。抽象类的子类要么覆盖抽象类中的所有抽象方法;或者它们是抽象类(2)抽象类的成员特征。成员变量可以是变量也可以是常量●构造函数有构造函数,但不能实例化。那么,构造函数的作用是什么?用于子类访问父类数据的初始化成员方法可以有抽象方法:限定符必须完成一定的动作,也可以有非抽象方法方法:提高代码复用性三、接口一、接口概述接口是一个公共规范标准,只要符合规范标准,人人都可以使用Java。接口更多的体现在行为的抽象上。2.接口的特点接口使用关键字interface修饰公共接口接口名{}类实现接口用implements表示公共类类名实现接口名{}接口不能实例化如何实例化接口?参考多态的方法,通过实现类对象实例化,这叫做接口多态。多态的形式:具体类多态、抽象类多态、接口多态。多态的先决条件:继承或实现关系;方法重写;父(类/接口)引用指向(子/实现)类对象接口的实现类要么重写了接口中的所有抽象方法,要么就是一个抽象类3.接口的成员特性●成员只能是常量。默认修饰符:publicstaticfinal●构造方法接口没有构造方法,因为接口主要是对行为进行抽象,没有具体的类。如果没有父类,则默认继承自Object类●成员方法只能是抽象方法默认修饰符:publicabstract4。类与接口的关系●类与类的关系继承关系,只能单继承,但可以实现多层继承●类与接口的关系关系可以是单实现的,也可以是多实现的。也可以在继承一个类的同时实现多个接口。接口和接口关系继承关系可以是单继承也可以是多继承。5.抽象类和接口成员的区别抽象类的区别:变量,常量;施工方法;抽象方法和非抽象方法接口:常量;抽象方法关系类与类的区别:继承,单继承类与接口:实现,单实现,还是多个实现接口与接口:继承,单继承,多继承设计理念区别抽象类:类的抽象,包括属性和行为接口:行为的抽象,主要是行为4.内部类1.作为形参和返回值(1)类名作为形参和返回值方法的形参是类名,实际是什么需要的是类的对象方法的返回值是类名,实际返回的是类的对象(2)抽象类名作为形参和返回值●方法的形参是抽象类名,其实需要的是抽象类的子类对象●方法的返回值是抽象类名,其实返回的是抽象类的子类对象(3)接口名用作形式参数和返回值。方法的形式参数是接口名称。其实需要的是接口的实现类对象。方法的返回值是接口名,返回的是接口的实现类对象2.内部类概述内部类:就是在一个类中定义一个类。例子:在A类内部定义了B类,B类称为内部类。定义格式:publicclass类名{修饰类类名{}}示例:publicclassOuter{publicclassInner{}}内部类的访问特性:内部类可以直接访问外部类的成员,包括private;外部类必须访问内部类成员,必须创建对象。成员内部类:根据定义内部类在类中的位置,可以分为以下两种形式:类的成员位置:成员内部类局部位置:局部内部类成员内部类,如何从外部世界创建对象:格式:外部类名。内部类名对象名=外部类对象。内部类对象;Outer.Inneroi=newOuter().newInner();局部内部类:局部内部类是方法中定义的类,因此不能直接使用外界。需要在方法内部创建一个对象,用这个类直接访问外部类的成员,也可以在方法中访问局部变量。匿名内部类:前提:存在一个类或接口,其中的类可以是具体类也可以是抽象类。格式:新类名或接口名(){重写方法;};例子:newInter(){publicvoidshow(){}};本质:是继承本类或实现本接口对象的匿名子类。