文章目录
一 类与对象的创建
一个项目应该只存在一个main方法
this指代这个类
二 构造方法详解
-
一个类就算什么都`不写,也会存在一个构造方法
-
类中的构造器也称构造方法,是在进行创建对象的时候比u要调用的.并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
package com.oop;
public class Person {
String name =;
public Person(){//无参构造
this.name="帅哥";
}
public Person(String name){//有参构造
this.name=name;//
}
}
按 alt+insert 可以自动生成构造方法,但是笔记本上得关闭数字键盘,才能使用insert
[在csdn上发现alt+enter有很多种用途]((4条消息) idea万能快捷键(alt enter),你不知道的17个实用技巧!!!_最简单的东西,往往包含了最复杂的实现。-CSDN博客)
三 三大特性
引用类型的初始值都为null
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIuKpyod-1626353033474)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715080905749.png)]
按 alt+insert 也可以自动get与set方法
3.1 类的访问控制权限
类的两种访问控制权限:公有和缺省
- 公有权限使用public修饰符,可被所有包中的所有类访问;
- 缺省权限没有修饰符,仅能被当前包中的其他类访问
3.2 类中成员的访问控制权限
-
private声明私有成员,该成员只能被当前类的成员访问,这是类希望隐藏的部分.
-
缺省:当前类和当前包
-
proteceted :当前类及其子类或当前包中的类
-
public:可被所有类访问
导入当前包中的其他类时,import可以省略
四 继承
在静态方法中是不能使用this预定义对象引用的*,即使其后边所操作的也是静态成员也不行.
因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,*对象还不一定存在
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELqMnXWP-1626353033478)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715091826980.png)]
- ctrl+h 查看当前的继承关系
五 super
- 使用super()调用父类的构造方法,并且子类的构造方法在第一行默认执行父类的构造方法.
声明了有参构造,但没有声明无参构造时,子类会报错,因为子类找不到父类中的无参构造方法(有参构造将系统隐藏起来的无参覆盖掉了);
super()与this()不能同时调用构造方法,因为没法否在第一行.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCgm00DE-1626353033480)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715121742784.png)]
六 方法重写
静态方法:方法的调用只和定义变量时左边的类型有关
非静态方法:方法重写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMYsq4sV-1626353033483)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715134603130.png)]
override : 重写 , 覆写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TW8SK3p-1626353033484)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715140015927.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHuIPcto-1626353033486)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210715140857093.png)]
七 多态(重点)
//一个对象的实际类型是确定的,如new Student()\new Person()
Student s1=new Student();//但是引用类型是不确定的
Person s2=new Student();//父类的引用指向子类
Object s3=new Person();//父类的引用指向子类
/*对象能执行哪些方法,主要看对象左边的引用类型,和右边没关系*/
s2.eat();//s2为person类,person类中无eat()方法,因此报错
s1.eat();//无报错
7.1 多态需要注意的事项:
-
多态是方法的多态,属性没有多态
-
父类与子类,要有联系.无联系时强行类型转换,会出现转换异常! ClassCastException!
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象!
Farther f1=new Son();
7.2 方法不能重写的情况:
- static 方法,属于类,它不属于实列
- final 常量
- private 方法
八 instanceof与类型转换
Person stu=new Student();
System.out.println(stu instanceof Student);//true,stu是student类的实列
System.out.println(stu instanceof Student);//true
//高 低
Person stu=new Student();/*低转高,所以自动转换,不是强制转换
子类转化为父类,可能会丢失属于子类的一些方法*/
Person person=new Person();
(Student)person;//高转低,需要强制转换
九 static 关键字详解
package com.oop1;
public class Demo1 {
{
System.out.println("匿名代码块");
}
static{
System.out.println("静态代码块");
}
public Demo1() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
System.out.println("============================================");
Demo1 demo2= new Demo1();
}
}
静态代码块
匿名代码块
构造方法
============================================
匿名代码块
构造方法
从上面可以看出,当匿名代码块 静态代码块 构造方法都有时,会按照静态代码块-匿名代码块-构造方法这样的顺序执行;但是静态代码块只执行一次.
import static java.lang.Math.random//静态导入包
System.out.println(Math.random());//当我们嫌 Marh.radom()太长时,可以使用静态导入包
System.out.println(random());
用 final 修饰的类,无法被继承,俗称断子绝孙