1.对象和类
什么是对象?
就是现实世界真实存在的个体/实体
例如:一个人;一支笔;一把椅子....
什么是类?
就是具有相同或相似属性和行为的对象的集合
例子:人类;鸟类....
什么是对象?
就是现实世界真实存在的个体/实体
例如:一个人;一支笔;一把椅子....
什么是类?
就是具有相同或相似属性和行为的对象的集合
例子:人类;鸟类....
class Human{//创建了一个 Human的类
/* 相同或相似的属性 */ String name;//姓名 int age; String address;
/* 相同或相似的行为(方法) */ void eat(){} void sleep(){}
}
2.继承的意义
1)意义:为了代码的复用
2)语法:通过 "extends" 关键字来继承
被继承的类我们叫 “超类或者父类”,继承的类我们叫“派生类或者子类”。
继承的特点:
-----》一个子类只能由一个父类,但是一个父类可以有很多个子类,这个特点我们称之为“继承的单一性”
(可以理解为:一个爸爸可以有多个儿子,但是一个儿子只能有一个爸爸.)
-----》子类可以继承父类,子类还可以被继承以此类推(爷爷-->儿子-->孙子......),这个特性我们称之为“继承的传递性”
3)理解过程:
--->现实世界中的继承
继承财产----------------------------------------------------------------结果:财产虽然不是我挣得,但是我也能用
继承皇位----------------------------------------------------------------结果:江山不是我打的,但是我也能坐
继承工作(早些年的时候)--------------------------------------------结果:工作不是我找的,但是我也能工作
--->代码中的继承
结果:代码不是我写的,但是我也能用
例子:
class Human{//超类/父类
String name;
int age;
String address;
void eat(){}
void sleep(){}
}
/*
*@简述:这个Teacher类继承了Human类,那么Teacher类具有Human中所有的属性和行为
*包括 name,age,address,还有方法eat() 和 sleep()
*虽然Teacher类中没有写但是也是属于他的,Teacher对象同样能够访问和使用这些
*属性和行为
*/
class Teacher extends Human{//继承Human类
double sarray;//老师有一个公资属性
void teach(){//老师有一个特有的教学行为(方法)
}
}
class Test{//派生类/子类
public static void main(String[] args){
Teacher t = new Teacher();
t.sarray = 10001;
t.name = "张三";
t.age = 12;
t.address = "北京";
t.eat();
//.....
}
}
总结:从这个例子中可以看出虽然Teacher类中没有写name,age,address,eat(),sleep()等属性和行为,但是Teacher类通过继承Human类,也具有了这些属性
和行为。这样做的好处就是可以大大提高代码的复用性。
4.方法的“重载”与“重写”
重载:
@简述:发生在同一个类中,方法名相同,参数列表不同,方法体不同
@意义:以适应用户的各种不同的需求
直接上代码
/*
@简述:类Aoo中有四个重载的方法
*/
class Aoo{
void show(){
//....
}
void show(int a){
//....
}
void show(String str,int a){
//....
}
void show(int a,String str){
//....
}
}
重写:
@简述:发生在父子类中,方法名相同,参数列表相同,方法体不同
@意义:当父类的一些方法子类觉得不好用了或者需要改进时,就需要“重写”
class Aoo{
void show(){
方法体1
//....
}
}
class Boo extends Aoo{
void show(){
方法体2
//....
}
}
重点:
@重写与重载的区别?
重写:发生在父子类中,方法名相同,参数列表相同,方法体不同
重载:发生在同一个类中,方法名相同,参数列表不同,方法体不同
5.访问控制 static 和 final
static修饰符(重点):
简述:static是JAVA中一个常见的修饰符,用的比较少
适用场合:用于修饰的变量为(图片,视频,音频)时,特点就是数据只有一份。大家都用同样的一份数据。
1)static修饰变量
@简述:static修饰的变量我们称之为“静态变量”,静态变量是存储在方法区中的。我们都知道JAVA程序是先编译后运行的
编译期:.java 源文件 ------> .class字节码文件
运行期:JVM加载并运行.class字节码文件
其中.class字节码也是存储在方法区中的,所以程序首先处理的是方法区里面的东西(这个地方是我个人理解)
需要注意的是“静态变量”在方法区中只有一份,也就是数据只有一份。
class Test{
public static void main(String[] args){
Aoo a = new Aoo();
Aoo b = new Aoo();
Aoo c = new Aoo();
/*
输出结果:
static a: 2,b:2
static a: 3,b:2
static a: 4,b:2
*/
}
}
class Aoo{
public static int a = 1;
int b = 1;
Aoo(){
a++;
b++;
System.out.println("static a: "+ a+",b:"+b);
}
}
2)static修饰方法
@简述:这种实际开发中用的比较少,但是也有。
适用场合:当一个方法的使用的结果只与参数有关而与对象无关时
import java.util.Arrays;
class T{
public static void main(String[] args){
int[] arr = {1,1,12,2,333,3,};
int[] arr1 = {2,2,1,2,2,2,3,4,5};
Arrays.sort(arr);//结果只与参数有关,而与对象无关
Arrays.sort(arr1);
}
}
3)static静态块