(Object-Oriented Programming,OOP)
方法的定义
break
和return
的区别方法的调用
public class Student{ //非静态 public void say(){ System.out.println("学生说话了"); } } public class Demo { public static void main(String[] args) { //实例化这个类 Student student = new Student(); student say(); } }
this
关键字:指向自己这个类的引用 this.namenew
创建对象new
关键字创建的时候,出了分配内存空间以外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用package oop; /** * @author GoddamnCode * @create 2021-06-1-15:38 * @site https://blog.csdn.net/GoddamnCode */ public class Student { //属性 String name; int age; //方法 public void study(){ System.out.println(this.name+"学生在学习"); } }
package oop; import oop.Student; /** * @author GoddamnCode * @create 2021-06-1-15:38 * @site https://blog.csdn.net/GoddamnCode */ public class Application { //一个项目中应该只有一个main方法 public static void main(String[] args) { //类是抽象的,需要实例化 //类实例化后会返回一个自己的对象 //student对象是一个Student类的一个具体实例 Student xiaoming = new Student(); Student xiaohong = new Student(); xiaoming.name = "小明"; xiaoming.age = 16; System.out.println(xiaoming.name); System.out.println(xiaoming.age); xiaohong.name = "小红"; xiaohong.age = 20; System.out.println(xiaohong.name); System.out.println(xiaohong.age); } }
对象是通过引用来操作的,栈(地址)–>堆
又叫字段(Field)、成员变量
基本数据类型:
引用类型:
该露的露,该藏的藏
封装
记住这句话就够了:属性私有 get/set,用共有的方法获取和设置私有的属性
封装的意义
idea快捷键:alt+insert 自动生成get、set方法
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
**extands
**的意思是“扩展”。子类是父类的扩展
Java中只有单继承,没有多继承!:一个儿子只能有一个爸爸,一个爸爸可以有多个儿子
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
继承关系的两类,一个为子类,一个为父类,子类继承父类,用关键词extends
来表示
子类和父类之间,从意义上讲应该具有“is a”的关系
object类
object
类super
super()
调用父类的构造方法,必须在构造方法的第一个super
只能出现在子类的方法或者构造方法中super
和this
不能同时调用方法this
代表的对象不同
this
:本身调用着这个对象
super
:代表父类对象的引用
前提
this
:没有继承也可以使用super
:只能在继承条件下才可以使用构造方法
this()
:本类的构造super()
:父类的构造方法重写:重点——>多态
public > protected > default > private
ClassNotFoundException——>Exception(大)
重写的时候,子类的方法和父类必须要一致,方法体不同!
为什么需要重写
Alt+insert : override;
ClassCastException!
father f1 = new son();
static
属于类,不属于实例final
常量private
instanceof
类型转化(引用类型),判断一个对象是什么类型public class Demo { //匿名代码块 { System.out.println("匿名代码块"); } //匿名静态代码块 static { System.out.println("匿名静态代码块"); } //构造方法 public Demo(){ System.out.println("构造方法"); } public static void main(String[] args) { Demo demo = new Demo(); System.out.println("======="); Demo demo1 = new Demo(); } }
执行顺序:
静态代码块只执行一次
//静态导入包 import static java.lang.Math.PI; import static java.lang.Math.random; public class Demo { public static void main(String[] args) { System.out.println(random()); System.out.println(PI); } }
被final修饰的类无法被继承
abstract
修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,就是抽象类class
,声明接口的关键字是interface
public interface Demo { void run(); } public class Demo1 implements Demo{ //alt+insert选择实现方法 @Override public void run() { } }
public interface Demo { void run(); } public interface Demo2 { void say(String name); } public class Demo1 implements Demo,Demo2{ @Override public void run() { } @Override public void say(String name) { } }
public abstract
public static final
implements
可以实现多个接口内部类就是在一个类的内部在定义一个类,比如A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类类
成员内部类
可通过内部类获取外部类的私有属性
public class Outer { private int id = 10; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){ System.out.println("这是一个内部类的方法"); } //获取外部类的私有属性 public void getID(){ System.out.println(id); } } } public class application { public static void main(String[] args) { Outer outer = new Outer(); //通过外部类来实例化内部类 Outer.Inner inner = outer.new Inner(); inner.getID(); } }
静态内部类
局部内部类
public class Outer { //局部内部类 public void method(){ class Inner{ public void in(){ } } } }
匿名内部类
public class Test { public static void main(String[] args) { //没有名字初始化类,不用将实例保存在变量种 new Apple().eat(); } } class Apple{ public void eat(){ System.out.println("吃"); } }
public interface Demo { void run(); } public class Test { public static void main(String[] args) { //没有名字初始化接口 Demo demo = new Demo(){ @Override public void hello(){ } } }; }
一个java类种可以有多个class类,但是只能有一个public类