面向对象高级特性

本文深入探讨了Java中的继承和多态概念,包括类的继承语法、继承的好处、多态的形式及其实现条件等,并介绍了静态成员、单例模式、抽象类、接口等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的继承:

继承:子类除了拥有父类的属性和行为,还可以定义自己的属性和行为

继承语法:class 子类名 extends 父类名

继承好处:代码重用率比较高,也就是代码共享;易维护;使编码更高效

java api中的祖宗类:Object类,是所有类的超类

继承原则:java只可以单继承,一个子类只能有一个直接父类

说法:子类就是父类,但父类不是子类

子类实例化:实例化的过程总是先调用父类的构造方法,然后再调用子类的构造方法,也就是说子类实例化总是先实例化父类,然后再实例化子类,这个过程是默认的,不需要自己去编写

多态:

1.两种形式:对象的多态  方法的多态

2.要想多态,必须具备什么条件?

第一:要有继承关系或者实现统一的接口

第二:子类要重写父类的方法

第三:父类引用指向子类对象

3.多态的优点:便于应用功能扩展,非常方便

静态 static:

static 表示静态的意思,就是类的意思

static 修饰的变量,代码块,方法,所有对象共享

static 方法不可以访问非static类型的变量

也就是静态的类的方法可以访问静态的变量,但是不能访问对象的东西

反过来就可以:对象可以访问类的东西

类——>对象的   不可以

对象——>类的   可以

static 修饰的东西既然是类的,那么怎么调用:类名.变量名     类名.方法名

寿命比较长:用static修饰的东西,类在则东西在

单例:

1.构造器私有,不允许别人随意调用

2.提供一个静态的公共的获取本类的实例的方法

3.在方法中进行实例生产的控制,只要静态变量不为空,就不再生产,这样就

final:

final 修饰的类,不能被继承

final 修饰的变量,值不能被修改,其实就是常量,这样所有对象共享,节省内存

定义常量的格式:

[访问修饰符]  static final  数据类型  常量名(大写)=值

final 修饰的方法:不可以被重写

抽象类:

1.抽象类不可以被实例化

2.如果一个方法没有方法体,那么它必须声明为抽象方法

[访问权限控制符]  abstract  [返回值]  方法名([参数列表])

*3.如果一个类中有抽象方法,那么这个类必须声明为抽象类

[访问权限控制符]  abstract  类名{    }

4.抽象类可以全部都是抽象方法,也可以全部都不是抽象方法

5.子类如果不实现抽象类中的抽象方法,那么子类也是抽象类

接口:

作用:主要用于软件层与层之间的解耦合

发明者为什么发明接口:在软件设计期间,代码都是声明的多,没有具体实现,所以它们采用了接口这种表达方式

定义:

[权限访问控制符]  interface  接口的名称{  }

使用规则:接口不可以被实例化

结构:接口中有常量和抽象方法

只要是接口中定义的方法一定是抽象方法

只要是接口中定义的变量一定是常量

接口与抽象类的区别:

1.接口中都是抽象方法

2.抽象类中除了抽象方法还可以定义变量,实现的方法,抽象类仍然是面向对象编程的一个类模板

java的继承是单继承,但是接口是多继承

接口和类的关系:

接口作为一个行为规范,其中定义的大都是抽象方法,待实现类去实现

所以类实现接口,语法是   class  类名  implements  接口名

类实现接口,可以实现多个接口:

语法是: class  类名  implements   接口名1,接口名2,接口名3...{  类体  }

接口和接口的关系:

接口可以继承接口,让自己变得更强大

语法: interface  子接口名字  extends  父接口1,父接口2,父接口3{ 接口的body }

如果一个类既要继承父类,又要实现接口怎么办?

例子:  Hudie类   有一种蝴蝶叫菜花蝶,是该类的子类,同时发现这种蝶有行为,可以变色

我们如何定义这个需求:

class Hudie    父类

class Caihuadie      子类

interface  ChangeColor     接口

内部类:

内部类的分类:成员内部类,静态内部类,局部内部类

怎么使用:

内部类可以无限制的访问外部类的属性和方法

但是外部类不可以随意访问内部类的属性和方法

内部类——>外部类     ok

外部类——>内部类     不ok

造型:

下溯造型:曾经向上转过的对象才能再向下转

下溯造型代码使用不当,就会出现问题,所以务必先判断再强转

判断格式:对象名称  instanceof  类名.

                 对象名称  instanceof  接口名.

返回值是boolean类型

上溯造型:声明类型是父类型,实际值是子类型的实例

上溯造型自动转型ok,但是会损失原子类实例所拥有的特有的方法

访问权限:

访问权限:它们可以修饰类  成员变量(属性)   成员方法   构造方法   内部类

权限最小:私有属性,只能本类访问,安全级别最高

//private int id; 当前类可见

默认访问权限:friendly,本类,同一包中的其他类可见

//int id;

访问权限:protected 本类,同一包中的其他类,子类

//protected int id;

公共的:public 所有类都可以访问,这样安全级别最低

//public int id;

方法的覆盖:

三点必须相同:方法名相同,参数列表相同,返回值相同

访问权限只能大于等于父类的被覆盖的方法,不能小于父类

重写可以直接拷贝父类的方法进行扩展,也可以通过工具自动生成

关于包的使用注意事项:

1.java.lang包中的所有类在使用时是自动导入,不需要import

2.其他包如果涉及到跨包访问,那么需要使用import导包,建议这样写:

import   包名.子包名.类名;

除非真的需要该包中的很多类,否则不要使用这个语法:  import  包名.子包名.*;

包的结构与文件目录结构一致;

类中包的声明格式:

package  顶级包名. 一级包名. 二级包名. 其他级包名;

java中常用的包:

java.util;

java.lang;

java.sql;

java.awt;

java.swing;

java.io;

java.net;

Super:

需求:子类需要实例化,需要给一些属性赋值,那么怎么办?

子类中希望调用父类的构造方法,怎么调用?

super( ); 默认调用的是父类的空构造器

super(12,"asd"); 这个调用的是父类的需要两个参数的构造器

super调用的是直接父类的构造方法,不是祖父的

super( ); 这个调用必须出现在第一行,如果该构造器没有,那么会报错

super( );调用父类构造器比较方便

子类构造方法中没有super,那么默认会调用父类空构造器,系统会给代码加一个super()

this 关键字的使用:

this 表示对当前对象的引用

this( ) 可以调用当前类中的其他构造器,根据参数个数和类型决定调用哪个构造器

this( ) 和super( )一样必须出现在代码中的第一行

this( ) 和super( )不可以出现在同一个构造方法中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值