面向对象
什么是面向对象
回顾方法的定义
package objectOriented;import java.io.IOException;//回顾方法的定义
public class Demo01 {public static void main(String[] args) {}public static String sayHello(){return "Hello,World!";}public int max(int a,int b){return a>b ? a:b;}public void readFile(String file) throws IOException{}
}
回顾方法的调用
package objectOriented;public class Student {//静态方法public static void say(){System.out.println("学生说话");}//非静态方法public void pillowTalk(){System.out.println("学生说悄悄话");}
}
package objectOriented;//回顾方法的调用
public class Demo02 {public static void main(String[] args) {Student.say();//静态方法调用Student student = new Student();student.pillowTalk();//非静态方法调用}//和类一起加载的
// public static void a(){
// b();
// }
//类实列话之后才存在
// public void b(){
//
// }//区分实参和形参public static int add(int a,int b){return a+b;}
}
package objectOriented;//值传递
public class Demo03 {public static void main(String[] args) {int a = 1;System.out.println(a);change(a);System.out.println(a);}public static int change(int a){a=10;return a;}
}
package objectOriented;//引用传递
public class Demo04 {public static void main(String[] args) {Person person = new Person();System.out.println(person.name);change(person);System.out.println(person.name);}public static void change(Person person){person.name = "张三";}
}class Person{String name;
}
类与对象的关系
package objectOriented;public class Student {String name;int age;//方法//静态方法public static void say(){System.out.println("学生说话");}//非静态方法public void pillowTalk(){System.out.println("学生说悄悄话");}public void study(){System.out.println(this.name + "在学习");}
}
package objectOriented;public class Demo05 {public static void main(String[] args) {//类实例化//类实例化后返回一个自己的对象Student student = new Student();student.study();}
}
构造器详解
package objectOriented;public class Person {String name;//无参构造器public Person(){}//alt+insert//构造器(有参)public Person(String name){this.name=name;}
}
创建对象内存分析
简单小结类与对象
封装详解
package objectOriented2;public class Student {//属性私有private String name;private int id;private char sex;//提供一些public的get,set的方法//alt+insertpublic String getName(){return this.name;}public int getId(){return this.id;}public char getSex(){return this.sex;}public void setName(String name){this.name = name;}public void setId(int id){this.id = id;}public void setSex(char sex) {this.sex = sex;}
}
什么是继承
package objectOriented2;public class Person {//public//protected//default//privatepublic void say(){System.out.println("人在说话");}
}
package objectOriented2;//子类继承了父类,就会有父类的全部方法
public class Student extends Person{//属性私有private String name;private int id;private char sex;//提供一些public的get,set的方法//alt+insertpublic String getName(){return this.name;}public int getId(){return this.id;}public char getSex(){return this.sex;}public void setName(String name){this.name = name;}public void setId(int id){this.id = id;}public void setSex(char sex) {this.sex = sex;}
}
package objectOriented2;public class Demo01 {public static void main(String[] args) {Student student = new Student();student.say();}
}
Super详解
package objectOriented2;public class Person {//public//protected//default//privatepublic String name = "Person";}
package objectOriented2;//子类继承了父类,就会有父类的全部方法
public class Student extends Person{public String name = "Student";public Student(){super();//调用父类的无参构造}public void print1(){System.out.println(this.name);}public void print2(){System.out.println(this.name);System.out.println(super.name);}}
package objectOriented2;public class Demo01 {public static void main(String[] args) {Student student = new Student();student.print1();student.print2();}
}
方法重写
package objectOriented2;public class B {public static void test1(){System.out.println("B->test()");}public void test2(){System.out.println("B->test()");}
}
package objectOriented2;public class A extends B {public static void test1(){System.out.println("A->test()");}public void test2(){System.out.println("A->test()");}
}
package objectOriented2;public class Demo02 {public static void main(String[] args) {//静态方法: 方法的调用只和左边定义的数据类型有关//非静态:重写A a = new A();B b = new A();a.test1();b.test1();a.test2();b.test2();}}
多态
package objectOriented3;public class Person {public void run(){System.out.println("run");}
}
package objectOriented3;public class Student extends Person{public void run(){System.out.println("son");}public void eat(){System.out.println("eat");}
}
package objectOriented3;public class Demo01 {public static void main(String[] args) {//能调用的方法都是自己的或继承父类的Student s1 = new Student();//可以指向子类,但不能调用子类独有的方法Person s2 = new Student();Object s3 = new Student();s1.run();s2.run();s1.eat();//s2.eat();}
}
instanceof和类型转换
package objectOriented3;public class Person extends Object{}
package objectOriented3;public class Student extends Person{public void go(){System.out.println("go");}
}
package objectOriented3;public class Teacher extends Person{
}
package objectOriented3;public class Demo01 {public static void main(String[] args) {Object object = new Student();System.out.println(object instanceof Student);System.out.println(object instanceof Person);System.out.println(object instanceof Object);System.out.println(object instanceof Teacher);System.out.println(object instanceof String);Person student1 = new Student();//System.out.println(person instanceof String);//编译报错((Student)student1).go();//父类转化为子类Person student2 = new Student();Person person = student2;//子类转化为父类会丢失一些方法或属性}
}
static关键字详解
package objectOriented3.Demo02;import java.sql.SQLOutput;//如果被final修饰则不能被继承
public class Person {//2:赋初始值{System.out.println("匿名代码块");}//1:只执行一次static{System.out.println("静态代码块");}//3public Person(){System.out.println("构造方法");}public static void main(String[] args) {Person person = new Person();}
}
package objectOriented3.Demo02;public class Student {private static int age;//静态变量,多线程,所有对象共享private double score;//非静态变量public void run(){}public static void go(){}public static void test(){//run(); 非静态方法,不能在静态方法里被调用go();}
}
package objectOriented3.Demo02;//静态导入包
import static java.lang.Math.random;
public class Test {public static void main(String[] args) {System.out.println(random());}
}
抽象类
package objectOriented3.Demo03;//abstrac 抽象类
//抽象类的所有方法,继承了它的子类都必须实现它的方法,除非子类也是抽象类
//类只有单继承,但是接口可以多继承
public abstract class Action {//抽象方法,只有名字,没有方法的实现public abstract void doSomething();
}
package objectOriented3.Demo03;//抽象类的所有方法,继承了它的子类都必须实现它的方法
public class A extends Action{@Overridepublic void doSomething() {}
}
接口的定义和实现
package objectOriented3.Demo04;public interface UserService {//接口中的所有定义方法都是抽象的公共的 public abstract//接口中的所有定义属性都是常量 public static finalvoid add(String name);void delete(String name);void update(String name);void query(String name);
}
package objectOriented3.Demo04;public interface TimeService {}
package objectOriented3.Demo04;//利用接口可以”多继承“
public class UserServiceImpl implements UserService,TimeService{@Overridepublic void add(String name) {}@Overridepublic void delete(String name) {}@Overridepublic void update(String name) {}@Overridepublic void query(String name) {}
}
内部类
package objectOriented3.Demo05;public class Outer {private int id = 1;public void out(){System.out.println("这是外部类的方法");}class Inner1{public void in(){System.out.println("这是内部类的方法");}public void getId(){System.out.println(id);}}// class static Inner2{
// public void in(){
// System.out.println("这是内部类的方法");
// }
// public void getId(){
// System.out.println(id);
// }
// }
}
package objectOriented3.Demo05;public class Application {public static void main(String[] args) {Outer outer = new Outer();Outer.Inner1 inner = outer.new Inner1();inner.getId();}}//一个java类里可以有多个class,但是只能有一个poublic class
class A{}