一、类和对象
对象:客观世界中的任何事物都是对象。一个对象一般具有两方面的特征:状态(成员变量)和行为(成员方法)。状态用来描述对象的静态特征,而行为用来描述对象的动态特征。因此对象是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的实体。
类:类是面向对象系统中最重要的概念。类可以定义为具有相似特征和行为的对象的集合,如人类共同具有的区别于其他动物的特征有直立行走、使用创造工具、使用语言交流等。
类的定义(包含类声明和类体的定义)
[public][abstract | final] class 类名 [extends SuperClass][implements InterfaceNameList] {
//成员变量声明
//构造方法定义
// 成员方法定义
}
(1)类的访问修饰符可以是public或缺省。若类用 public修饰,则该类称为公共类,公共类可被任何包中的类使用。若不加public 修饰符,类只能被同一包中的其他类使用。如果类使用abstract 修饰符,则该类为抽象类;若用final 修饰符,则该类为最终类。
(2)extends SuperClass。
如果一个类要继承某个类需使用extends指明该类的父类,SuperClass为父类名,即定义该类继承了哪个类。如果定义类的时候没有指明所继承的父类,那么它自动继承Object类。
(3)implements InterfaceNameList。
如果定义的类需要实现接口,则使用implements InterfaceNameList选项。一个类可以实现多个接口,若实现多个接口,则接口名中间用逗号分开。
(4)类声明结束后是一对大括号,大括号括起来的部分称为类体。
例如:class Person{
double num;
public sport() { }//无参数的构造方法
public void speak(){
System.out.println("love karry");
}
}
此程序定义了一个double类型的成员变量、一个无参数的构造方法以及成员方法。
成员变量的定义
成员变量的声明格式:
[public|protected|privatej[static][final] type variableName [=value];
(1)变量的访问修饰符。
public、protected、 private 为变量的访问修饰符。用public修饰的变量为公共变量,公共变量可以被任何方法访问;用frotected修饰的变量称为保护变量,保护变量可以被同一个包中的类或子类访问;没有使用访问修饰符,该变量只能被同一个包中的类访问;用private修饰的变量称为私有变量,私有变量只能被同一个包中的类访问。
(2)实例变量和静态变量。
如果变量用static 修饰,则该变量称为静态变量,又称为类变量。没有用static 修饰的变量称为实例变量。
(3)使用final修饰的变量叫作最终变量,也称为标识符常量。常量可以在声明时赋初值,也可以在后面赋初值,一旦为其赋值,就不能再改变了。
构造方法
- 构造方法分为无参数构造方法、带参数构造方法、默认构造方法。
- 构造方法的名称必须与类名相同。
- 构造方法不能有返回值,也不能返回void。
- 构造方法必须在创建对象时是用new运算符调用。
1、无参数构造方法
public Speak() { }
使用无参数构造方法创建对象,只需要在类名后使用一对括号即可。
Speak id=new Speak();
2、带参数的构造方法
public Speak(int n ,double m) {
name=n;
age = m;
}
创建一个姓名为“张三”,年龄为18的对象
Speak id=new Speak(“张三”,18);
3、默认构造方法就是无参数构造方法,方法体为空。一旦为类定义了带参数的构造方法,则编译器不会再提供默认构造方法了。
二、封装
- 封装就是把对象的状态(属性)和行为(方法)结合成一个独立的系统单位,并尽可能地隐藏对象的内部细节。封装使对象形成2个部分:接口部分(可见)和实现部分(不可见)。
- 对象的封装通过两种方式实现:通过包实现;通过类或类的成员访问权限实现。
三、继承
- 继承是一个对象获得另一个对象属性的过程。在类的层次结构中,被继承的类称为父类或超类;继承得到的类称为子类或派生类。子类在继承父类的基础上还有自己的特征。
- 子类与父类之间是单继承的
public class Speak extends Person{
public double salary;
public Speak(){ }//无参数构造方法
public Speak (double salary){
this.salary=salary;//带一个参数构造方法
………………
}
}
此程序我们定义了一个名为Speak的类,并通过继承Person类得到它的属性和行为。Person类成为Speak类的父类。
四、多态
多态是指一个程序中相同的名字表示不同含义的情况。面向对象程序中的多态有多种情况。在简单的情况下,在同一个类中定义了多个名称相同的方法,即方法重载;另一种情况是子类中定义的与父类中的方法同名的方法,即方法覆盖。这两种情况都称为多态,且前者称为静态多态,后者称为动态多。
例如:
class Animal{
public void eat(){
System.out.println("动物要进食");
}
public void sleep(){
System.out.println("动物要休息");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫咪要吃饭");
}
public void sleep(){
System.out.println("猫咪要睡觉");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗要啃骨头");
}
public void sleep(){
System.out.println("狗要打盹");
}
}
class Bird extends Animal{
public void eat(){
System.out.println("鸟儿吃虫子");
}
public void sleep(){
System.out.println("鸟儿休憩");
}
}
class AnimalTools {
//private的作用是让外面无法创建AnimalTools类的对象,只能使用这里面的方法
private AnimalTools() {
}
public static void funAnimal(Animal animal){
animal.eat();
animal.sleep();
}
}
public class Demo1 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
Bird b = new Bird();
AnimalTools.funAnimal(c);
AnimalTools.funAnimal(d);
AnimalTools.funAnimal(b);
Cat c2 = new Cat();
AnimalTools.funAnimal(c2);
}
}