概述
面向对象
- 构造器:new就是一个构造器,作用是:①分配空间;②赋初始值(避免错误,简化输入);
- new Object(Parameters)构造器调用构造函数,传参为了赋初始值;
- 对象的基本元素是:属性和方法 类成员(属性和方法)。属性最为重要,属性的集合是一个状态,方法是一个状态到另一个状态的桥梁;
- 封装:属性和处理属性的方法集合起来。把数据及数据的操作方法放在一起,作为一个相互依存的整体,即对象。
类的访问控制符只有三种:public、private、protected
类和对象的概念
类:类是一个模板,它描述一类对象的行为和属性。
对象:对象是类的一个实例,有 属性 和 行为 。
创建对象使用的公式就是: 类名 对象名 = new 类名();
给对象的属性赋值: 对象名.属性名 = 值;
使用对象的属性: 对象名.属性名
调用对象的方法: 对象名.方法名();
构造方法:
构造方法:对象被创建的时候会调用的方法,对象在被创建的时候,也就是被new的时候,会自动调用构造方法。
构造方法定义要求:
- 构造方法可以有参数,也可以没有参数
- 构造方法没有返回值,也不需要void关键字
- 构造方法名必须和类名相同
- 如果定义的类没有声明构造方法,对象在创建时默认使用空的构造方法。
- 构造方法与对象的方法不同,它是在对象创建时自动调用的;
构造方法可以被重写但不能被重载,因为重写发生在父类和子类之间,要求方法名称相同,而构造方法的名称是和类名相同的,而子类类名不会和父类类名相同,所以不可以被重写
static
static是静态的意思,是一个修饰符.static修饰变量,这个变量就变成了静态变量,修饰方法这个方法就成了静态方法,
static关键字方便在没有创建对象的情况下来进行调用(方法/变量)。
static修饰的变量饿和方法又称为类变量和类方法。
类变量的访问不需要创建对象,直接 类名.成员变量。进行访问。
类方法的访问也是直接***类名.方法名***,进行访问。
如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份拷贝。
静态方法不能使用类的非静态变量
static修饰的是静态方法
静态方法可以直接调用静态方法,但是调用普通方法只能通过对象的实例才能调用。
静态代码块
类被加载的时候运行且只运行一次
静态代码块是不需要依赖main方法就可以独立运行的
- 静态方法不能调用非静态变量,非静态方法可以调用静态变量。静态方法属于类而不属于对象,不需要实例化。
- 静态方法可以直接调用静态方法,不能调用非静态方法,可以理解为静态方法的产生比非静态方法早,因此在调用的时候静态方法找不到非静态方法,所以会出错。
封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的意义
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:
- 良好的封装能够减少耦合;
- 类内部的结构可以自由修改;
- 可以对成员进行更精确的控制;
- 隐藏信息,实现细节。
封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承
可以让某个类型的对象获得另一个类型的对象的属性的方法。
继承需要符合的关系是:is-a,父类更通用,子类更具体。
继承的特性:
- 子类拥有父类非private的属性和方法;
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
- 子类可以用自己的方式实现父类的方法;
- 在Java中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是Java中却允许多层继承,多层继承就是,例如类C继承类B,类B继承类A,所以按照关系就是类A是类B的父类,类B是类C的父类,
- 提高了类之间的耦合性
类B继承类A:class B extends A
子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。
- 如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下写不写super()语句效果都是一样;
- 如果子类的构造方法中通过super显示调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法;
- 如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则;
- 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。
super
super主要的功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法。
super关键字的用法如下:
- super可以用来引用直接父类的实例变量;
- super可以用来调用直接父类方法;
- super()可以用于调用直接父类构造函数。
super与this的区别
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
在子类中引用父类的构造函数需要在程序首行增添super();
super调用父类的构造方法,如果父类的构造方法中含有参数,那么在子类的构造方法中首行写super(******),括号中需要写出对应的输入值。
重写
当一个子类继承一父类,而子类中的方法与父类中的方法的名称、参数个数和类型都完全一致时,只是方法体发生改变。
- 重写的方法不能比被重写的方法有更严格的访问权限;
- 重写的方法不能比被重写的方法产生更多的异常
重载
多个方法可以享有相同的名字,但是参数的数量或类型不能完全相同。
重载的规则
- 被重载的方法必须改变参数列表(参数个数或类型不一样);***
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载;
- 无法以返回值类型作为重载函数的区分标准。
抽象类
抽象类的作用有点类似“模版”,其目的是要设计者依据它的格式来修改并创建新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。
- 抽象类和抽象方法都必须用abstract关键字来修饰;
- 抽象类不能被实例化,也就是不能用new关键字去产生对象;
- 抽象方法只需声明,而不需实现;
- 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
抽象方法只是声明了返回值的数据类型,方法名称和参数,没有去定义方法体。
final
final关键字的使用
在Java中声明类、属性和方法时,可使用关键字final来修饰。
- final标记的类不能被继承;
- final标记的类不能被继承;
- final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
- 声明为final的类隐含地声明了该类的所有方法为final方法。
- 一个类不能既是抽象类又是final类。
- final和static一起制定一个类常量
多态
指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。同一个事件发生在不同的对象上会产生不同的结果。
多态的三个条件:
- 继承的存在(继承是多态的基础,没有继承就没有多态);
- 子类重写父类的方法(多态下调用子类重写的方法);
- 父类引用变量指向子类对象(子类到父类的类型转换)。
用 instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。instanceof 的语法格式为:
对象 instanceof 类(或接口),返回值是布尔型的,或真(true)、或假(false)。
接口
接口(interface)是Java所提供的另一种重要技术,它的结构和抽象类非常相似,也具有数据成员与抽象方法,但它与抽象类又有以下两点不同:
接口里的数据成员必须初始化,且数据成员均为常量;
接口里的方法必须全部声明为abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”。
interface 接口名称 // 定义抽象类
{
final 数据类型 成员名称 = 常量; //数据成员必须赋初值
abstract 返回值的数据类型 方法名称(参数...);
//抽象方法,注意在抽象方法里,没有定义方法主体
}
接口实现
class 类名称 implements 接口A,接口B //接口的实现
{
...
}
一个类只可以继承一个父类,但却可以实现多个接口。
接口的扩展(或继承)也是通过关键字extends来实现的。有趣的是,一个接口可以继承多个接口。
interface 子接口名称 extends 父接口1,父接口2...
{
...
}
String中的每一位不是char类型,所以要将String中的每一位用char表示,就需要用使用
String.charAt( index ) 方法,返回在index位置的char字符。(返回值:char )
使用 String.toCharArray( ) 方法,将String 转化为 字符串数组。(返回值:char[] )
最后
以上就是欣慰香菇为你收集整理的java类与对象的全部内容,希望文章能够帮你解决java类与对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复