面向对象编程(Object-Oriented Programming,OOP)
面向对象编程的本质是:一类的方式组织代码,以类的方式组织代,以对象的组织(封装)数组
面向对象的三大特征
封装
继承
多态
修饰符
返回类型
break(跳出switch循环)和return
方法名
参数列表
异常抛出
使用new关键字来创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
类中的构造器也称为构造方法,时进行创建对象的时候必须调用的。并且构造器有以下两个特点:
1.必须和类名相同
2.必须没有返回类型,也不能写void
public class Student { //属性:字段 private String name; private int age; private String flag; //提供一些可以操作这个属性的方法 //提供一些public的get和set的方法 public String getName(){ return this.name; } public void setName(String name){ this.name=name; } } public static void main(String[] args) { //类是抽象的 Student student = new Student(); student.setName("sww"); System.out.println(student.getName()); } ------------------------ sww
意义
1.提高程序安全性,保护数据
2.隐藏代码实现的细节
3.统一接口
4.提高系统的可维护性
在Java中所有的类都默认继承object类
public(公共的)、 protected(受保护的)、 default(默认的)、 private(私有的)
静态方法:方法调用只和左边定义的数据类型有关
只有非静态的方法才能重写
只有共有的public修饰的方法才能有重写
重写需要有继承的关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围只能扩大 public>protected>default>private
4.抛出的异常:范围可以被缩小但不能被扩大
public static void main(String[] args) { //一个对象的实际类型是确定的 //new Student(); //new Persion(); //可以指向的引用类型就不确定了:父类的引用指向子类 //Student能调用的方法都是自己的或者继承父类的 Student s1 = new Student(); //Person父类型,可以指向子类但是不能调用独有的方法 Person s2 = new Student(); Object s3= new Object(); s1.run(); s2.run(); //子类重写了父类的方法 }
注意事项
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系,类型转换异常 ClassCastException
3.多态存在的必要条件:继承关系,方法重写,父类的引用指向子类对象father f1==》new Son();
不能被重写的方法
1.static方法,属于类,它不属于实例
2.fianl常量
3.private不能被重写
public static void main(String[] args) { Object object = new Student(); System.out.println(object instanceof Student); System.out.println(object instanceof Teater); System.out.println(object instanceof Person); System.out.println(object instanceof String); System.out.println(object instanceof Object); } ------------------------------------------------------------------- true false true false true
通过final修饰的类就不能有子类了,final之后断子绝孙
private static int age; //静态变量 private double score;//非静态变量 public static void run(){ } public void go(){ run(); } public static void main(String[] args) { Student student = new Student(); System.out.println(student.score); System.out.println(Student.age); run(); }
import static java.lang.Math.random; //2.赋初始值 { System.out.println("匿名代码块"); } //1.类加载的时候就有,只执行一次,第二次输出就没有 static { System.out.println("静态代码块"); } //3 public Student() { System.out.println("构造方法"); } public static void main(String[] args) { Student student = new Student(); System.out.println(Math.random());//每次很麻烦,我们只想每次用random,运用静态导入包 } ------------------------------------------------ 静态代码块 匿名代码块 构造方法
//abstract 抽象类:类 extend:只能单继承,但接口可以实现多继承 public abstract class Action { //约束~有人帮我们实现 //abstract抽象方法,只有方法的名字没有方法的实现 public abstract void doSomething(); //抽象类不能new出来,只能靠之类能实现他 } //抽象类的方法,继承了他的子类,都必须要实现他 public class A extends Action{ @Override public void doSomething() { } }
public interface TimeSevice { } public interface Demo09 { //接口中的所有定义都是抽象的 public void add(String name); public void del(String name); public void update(String name); public void select(String name); } //抽象类:extends //类 可以实现接口 implements 接口 //实现了接口中的类,就需要重写接口中的方法 //利用接口实现多继承 public class UserServiceImpl implements Demo09,TimeSevice{ @Override public void add(String name) { } @Override public void del(String name) { } @Override public void update(String name) { } @Override public void select(String name) { }
作用
1.约束
2.定义一些方法,让不同的人来实现
3.方法都是public abstract
4.接口不能被实例化的,接口中没有构造方法
含义:内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A来说就称为内部类,而A类相对B类来说就是外部类。
public class Outer { private int id =10; public void out(){ System.out.println("这是外部类的方法"); } class Inner{ public void in(){ System.out.println("这是内部类的方法"); } public void getId() { System.out.println(id); } } } public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.in(); inner.getId(); } --------------------------------------------------------- 这是内部类的方法 10
public class Outer { private int id =10; public void out(){ //局部内部类 class Inner{ } System.out.println("这是外部类的方法"); } public static class Inner{ public void in(){ System.out.println("这是静态内部类的方法"); } }