1.类和对象
定义类的语法
class 类名{ //为了规范类名首字母大写好看
成员;
}
2.类的实力化对象
实例化对象语法:
类名 对象名 = new 类名();new:给对象分配内存
3.访问对象中成员变量
访问对象中成员变量语法:对象名.成员
例子:一 先给对象分配空间 Demo1 zhang=new Demo1();
二 访问对象 zhang.name;
4.对象的引用
和数值名一样对象名也是表示一个引用。对象名赋值并不是把对象中内容进行赋值只是将引用赋值
例子 custormer zhang = new custormer(); 创建对象zhang
zhang.age=25; 给zhang的成员变量age赋值25
custormer li = new custormer(); 创建对象li
li=zhang 引用 ,这时li 和 zhang 对象都指向同一个空间,对象访问成员的值都一样.
5.成员函数
成员函数:就是在类中写的一个 函数(方法)
格式:void 函数名称(){
内容;
}
调用函数的方法同访问对象成员变量一样 格式:对象名.函数名();
函数和变量在同一个类中都是类中的成员 ,函数可直接访问同一类中的成员变量
最简单的函数只能完成一些事情,在实际操作中可以结合函数加入一些参数
格式void 函数名 (类型1 参数名1,类型2 参数名2.....){
内容;
}
调用方法对象名.函数名(参数列表); 参数列表用于传参数
参数列表内: 变量叫形参 ,常量叫实参
带返回类型的成员函数
格式 : 类型 函数名(参数列表)
{
内容;
return 还回值可常量,可变量;// return 返回值类型要与函数类型一样
}
6.函数重载
函数重载方法
一个函数名相同,另一个函数名也相同 ,但是另一个函数要满足下列三条其中之一条件:
一,函数参数的个数不一样
二,函数参数个数相同,类型不同
三,函数参数个数相同,类型相同,但是函数参数列表中,参数出现顺序不同
函数重载也称静态多态
(多动态:在不同情况下呈现不同形态,列如同名函数可实现不同功能(也就是重载))
9.构造函数
构造函数遵循一下原则:
一,函数名称与类名相同
二,不含返回类型
定义有参构造函数后,在实例化对象时必须传参数,否则报错
使用方法:类名 对象名 = new 类名(构造函数传参列表)
注意:
一,当一个类的对象被创建时,构造函数就会被自动调用
二,构造函数可重载,也就是在一个类中可定义多个构造函数实现不同功能
三,一个类中如果没用定义构造函数,那么系统会生成一个默认构造函数(也就是无参构造函数,不做任何事情)
所以在你没有定义构造函数时可以通过“类名 对象名= new 类名();”创建对象
关键字: this (用与区分局部和全局变量)
例子:class Demo{
int x=10;//全局
void fun(int x)
{
this.x=x; //用this 指定x为全局变量 后面的是局部变量 ,也就是fun()函数的形参
}
}
7.封装
封装作用:在类中将不能暴露的成员隐藏起来 (用private设置为私有变量 不能被外部使用)
私有变量格式: private : int a;
用public 暴露成员的访问 让外部可使用
8.继承
格式 class 子类 extends 父类 {
成员;
}
例子:class father { //父类
成员;
}
class son extends father{ //子类继承父类
成员;
}
注意:
父类中的私有成员不能被子类访问 (封装的实现)
不能多重继承,一个子类只能继承一个父类
可多层继承: 例子:A extends B B extends C 相当于A 间接继承C
9.成员覆盖
子类中函数定义与父类相同,最后调用子类中函数称为覆盖
列子:class father{ //父类
void text()
{
}
}
class son extends father{ //子类
void text()//与父类相同的成员函数 调用的是子类的函数
{
}
}
如果要调用父类中的函数用 关键字 super,格式: super.函数名();
重写的子类函数访问权限>=父类函数的访问权限
例如 父类: public fan(){} 子类:pulic fan(){}
父类:public fan(){} 子类:private fan(){} 错的
10 抽象类和接口
抽象类特征:
抽象类不能实例化 ,即不能用new 产生对象 Dog dog1= new Dog(); 错的
抽象方法只需要声,不需要实现(无方法体)
抽象类被子类继承,必须重写抽象方法(函数)
抽象类格式 在类定义前加abstract
例子 :abstract class Dog{
void run();
}
接口:
接口定义格式:interface 接口名称{
函数声明 无函数实现;
}
例子: interface Dog{
public void run();
}
接口继承格式:class 子类 implements 接口名{
重写接口函数;
}
例子: class Cat implements Dog
{
public void run()
{
System.out.println("Dog is runing");
}
}
注意:
接口中方法不需要abstract 指明, 系统默认其为抽象函数,接口中只有函数和常量
成员函数都是默认public 成员变量默认用public static final 标识(都是全局静态变量)
一个类继承父类的同时可以实现一个或多个接口
格式 class 子类 extends 父类 implements 接口1,接口2,.......{} extends 必须位于implements前
关键字 final :
修饰一个类时不能被继承 final class Dog{}
修饰一个函数不能被重写 final void run{}
修饰一个变量不能被更改 final double PI=3.14;