黑马程序员————面象对象的基本知识要点

本文详细介绍了面向对象编程的基础知识,包括类的声明与实例化、封装、继承、接口的概念及其使用方法,同时对类的方法、成员变量进行了阐述。

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

面象对象的基本知识要点

一:类
  1.类的声明及实例化

   类是面向对象关键,可以说没有类就没有对象;
 
   类具有两个优点,
 
   首先,他允许封装;即将数据和方法封装起来使得这方面的信息和其他程序有效的分开,
 
   封装的好处是如果修改了这个类,只要没改变这个类中的方法就不需要动别的程序;
 
   类的第二个优点是允许继承。
   类由两部分组成,
 
   第一部分是类的变量的声明,到二部分类中的方法;以下是创建一个叫test的类:
  在上面声明一个类时使用了修饰符"public".在声明类时可以使用三中说明符:public,final和abstract。
   public类意味这个类可以被任何对象使用和扩展,而且与他的包无关
   final类则表明这个类没有任何子类;
   abstract类即说明这个类是一个抽象类;
   如果类声明前没有任何修饰符,则默认为protected类,即只有同一个包中的对象才能使用该类。
   前面已经说了类有个优点是允许继承,这就说明新建的类可以使用已建类的变量和方法,
 
   这样通过基于简单的类建立较大的类的方法,可以减少许多代码的编写,也减少了在程序中查找和修改错误的工作;
 
   以下例子建立一个类MyClass,他继承了类test中所有的变量和方法:
   public class MyClass extends test{}
   其中类MyClss被称为子类,类test被称为父类或超类.
   当创建了类后,就可以用new来创建类的一个实例,并不是所有的类都需要创建他的实例,
 
   如果要使用的类中的方法或变量是静态的,就可以不用创建这个类的实例,
 
   但是静态的方法只能引用静态的类变量(System类的out变量是一个例外);以下例子创建类test的一个实例:
   test mytest=new test();
   创建类的实例是为了要引用这个类中的变量或方法,前面已经为类test创建了一个实例mytest,
 
   如果类test中包含了一个方法changtest(),可以用如下方式来引用:
   mytest.changtest();

   2.类的变量
   声明类的变量和声明类类似,前面可以跟上修饰符;变量有以下几种修饰符:
   public--变量在所有类中可视;包括包中的类和所有子类。
   protected--变量可以被当前类中的所有方法访问,但是在当前包以外的类中不可见。
   private--变量只能被当前类中的所有方法访问。
   static--声明此变量为静态变量。
   final--该修饰符说明此变量的值在运行期间不能被修改。
   为什么不把所有变量都声明成全局变量呢?有两个原因:
 
   第一个原因是这样做将浪费大量的内存;
 
   第二个原因是如果把所有变量都声明成全局变量会使得程序难以阅读。
   在类中有两个特殊的变量:this和super;
   在以下两种情况中需要使用this变量:
   在类中有两个变量同名,其中一个属于当前类而另一个属于某个特定的方法。
   当某个类需要将类作为参数传递给某个方法。
   以下情况需要使用super变量:
   当覆盖方法时,有时候希望使用老方法中的代码,这是可以使用super变量来获取原来的代码。
  3.有时候为了做一个项目需要建立一大堆的类,这些类文件就象没有子目录或文件夹的硬盘一样是杂乱无章的,
 
    为了方便管理所以引入了包,这样就可以将有着相关的类放在一个包中,包就象是文件夹或子目录。
 
    要想使某个类成为包的成员,必须使用package来声明他,
 
    要注意的是package语句必须是文件的第一行,package语句前面除了空白和注释不能有任何东西;例如:bitscn_com
   package packagename;
   如果要引用包packagename中的类则用以下方式:
   import packagename.*;
   以上命令是引用包packagename中的所有类,如果你只引用这个包中的某个类可以用以下方式:
   import packagename.classname;
   也许有人会问引用整个包中的类不好吗?为什么还要指定是某个类呢?原因有以下几点:
  首先当引用不在本地机器上的整个包,程序将通过网络将包的所有文件都拖过来,如果这个包有上千个类,而你只使用其中很少的部分,将浪费很多资源。
  如果引用的两个包中有共享的文件名(例如包pack1中有个叫classname的类,pack2中也有个叫classname的类,如果你使用importpack1.*;import pack2.*),你的系统就要崩溃了。
  4.下面就用一个例子来详细介绍如何创建,实例一个类:  ***********************************************************************************************
  二:接口
  1.
前面讲了类有个重要的特性就是继承,但是一个类只能有一个父类,
 
    为了实现象C++中的多继承性,就必须使用接口;接口和类非常相似,接口用于定义几个类具有的但又不在这些类中定义的功能,
 
    通过在接口中设置这些方法,描述出共同的特性,至于如何实现则是类本身的事。
 
    由于接口的这个特性,就意味着在接口中只能定义抽象的方法而不能有方法体;
 
    这又于类的定义相违背了,这就造成了接口不能扩展类。另外接口还有一个与类不同的地方是接口声明的变量必须是静态变量。
 
    下面语句定义了一个接口:
   public interface interf
   值得注意的是,如果使用了扩展的接口,必须将老接口的方法和新接口的方法全部覆盖掉。
 
   在覆盖方法时方法名和参数都必须和老方法一致,如果只是方法名相同而参数不同那将重载该方法,但不会覆盖该方法。
2 接口
*1*----接口所用的方法都是public abstract 
 注意:在方法名前没有定义public abstract的情况下,默认是public abstract。
*2*----在接口声明方法时,不能使用native,static,final,synchronized,private,protected等修饰符。
*3*----和public类一样,public接口也必须也定义在与接口同名的文件中。
*4*----接口中可以有数据成员,这些成员默认都是public static final。
*5*----一个接口可以继承自另一个接口。
*6*----JAVa中不允许类的多继承,但允许接口的多继承。
*7*----在JAVA中,一个类可以实现多个接口。
*8*----一个类在继承另一个类的同时,可以实现多个接口。
例子:
-----一个类实现多个接口-------
<1>类的方法

类的方法分为两中;
1. 静态方法(也叫做类方法),而静态方法不方法,是一种类;
语法:
static 数据类型 方法名();
在main中调用时;
用这个方法在它的类中的 
类名.方法名();
2.非静态方法(也叫做对象方法或实例方法)
语法:
数据类型 方法名();
在main中调用时;
首先创建这个方法的对象
语法:
类名 对象=new 类名();
对象.方法名();

<2>成员变量:

1.非静态变量(实例变量)
语法:
数据类型 变量名;
2.静态变量(类变量)
语法:
static 数据类型 变量名;

*静态方法和静态变量时属于某一个类,而不属于类的对象
*静态方法和静态变量的引用直接通过类名应用
*在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之,则可以
*可以用类的对象去调用静态的方法

<3>常量的定义

语法:
static final 数据类型 常量名=“”

<4>类的继承

class 类名1 extends 类名2
表示 类名1 
继承  类名2
类名1 是子类
类名2 是父类
<5>覆盖的方法

用super.方法名() 来调用被覆盖的方法
注意:
在用super调用方法时,在super语句前不能有任何语句;

<6>特殊变量this
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,
尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中的存在着一份拷贝

### JavaWeb程序设计任务教程与黑马程序员课后习题 #### Javabean规范要点 Javabean是一种Java编程语言的软件组件模型。其遵循特定约定,使得这些类可以被其他工具或框架识别和操作。两个重要的规定包括: - 类必须具有公共无参构造方法以便实例化[^1]。 - 属性应私有化并通过公共getter/setter访问器公开,这有助于封装数据并提供对属性修改的有效控制。 #### ServletContext接口的主要用途 ServletContext接口提供了多种功能以增强Servlet间的协作能力及其与容器之间的互动。具体来说,该接口能够做到以下几点: - 获取整个Web应用程序级别的初始化参数设置,这对于统一管理全局配置非常有用[^2]。 - 支持不同Servlet之间共享相同的数据结构或对象实例,从而简化跨请求的信息传递过程。 - 提供读取位于Web应用根目录下资源文件的能力,方便加载诸如配置文件之类的静态资源。 #### web.xml配置示例解析 以下是`web.xml`中定义的一个简单的Servlet映射片段,展示了如何注册名为`TestServlet`的服务端处理器,并为其指定了URL模式以及初始化参数: ```xml <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>cn.itcast.chapter03.servlet.TestServlet</servlet-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping> ``` 此段XML声明了一个处理HTTP请求的目标——`TestServlet`,并且设置了字符编码为UTF-8,确保了国际化的良好支持[^3]。 #### Web技术基础概念概述 对于构建现代网站而言,掌握几种核心技术至关重要。HTML作为一种超文本标记语言,负责描述网页上的各种元素;表单则是用户输入信息的重要载体,通常由三大部分构成:表单控件、提示信息和提交按钮;CSS即层叠样式表,旨在美化页布局而不干扰内容本身;而JavaScript则赋予前端更多交互性和动态特性,可以直接嵌入到HTML文档内执行,也可以作为外部JS文件引入使用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值