面向过程的语言:c
面向对象的语言:c++,java,c#
构造方法:
class Cat(){ // 类的属性 private String name; private Integer age; // 无参构造方法 public Cat() { } // 包含一个属性的构造方法 public Cat(String name) { this.name = name; } public Cat(Integer age) { this.age = age; } // 包含所有属性的构造方法 public Cat(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
Cat cat;
创建对象
Cat cat = new Cat();
一个引用可以指向多个对象,而一个对象可以被多个引用所指;
// 一个引用可以指向多个对象 Cat cat ; Cat cat1; // 一个对象可以被多个引用所指 cat = new Cat("小猫",5); cat = new Cat("大猫",6);
用于初始化对象,且只在对象创建初期调用一次
不手动创建构造方法时,JVM会为你默认添加一个无参构造器,但如果手动创建了构造方法,则JVM不会在为你创建默认的构造器,需要自己添加
没有参数类型和返回值,且名称要与类名保持一致,且构造方法可以有多个
// 无参构造方法(默认的构造方法) public Cat() { } // 包含一个属性的构造方法 public Cat(String name) { this.name = name; } public Cat(Integer age) { this.age = age; } // 包含所有属性的构造方法 public Cat(String name, Integer age) { this.name = name; this.age = age; }
每个重载方法都有一个独一无二的参数列表(即数量、类型、顺序不同)
方法重写是针对子类和父类之间的
特征:
1、重写的方法与父类保持一致,包括返回值类型,方法名,参数列表也必须一致
2、子类中重写方法的访问权限不能低于父类中的访问权限
3、重写方法可以用注解
@Override
来标注
// 父类 class Animal{ public void Eat(String name){ System.out.println(name + "在吃饭!"); } } // 子类 class Cat extends Animal{ @Override public void Eat(String name){ // 子类重写父类的Eat()方法 System.out.println(name + "在吃饭!但它不想吃!!!" ); } }
初始化顺序
静态属性 > 静态代码块 > 普通属性 > 普通代码块 > 构造函数
静态属性与静态代码块在程序启动后均只执行一次
static
修饰的属性static{}
包起来的代码块static
修饰的属性{}
包裹起来的代码public class Main { public static void main(String[] args) { Text text = new Text(); } } class Text{ // 静态属性 public static String staticFiles = getStaticFiles(); // 普通属性 public String files = getFiles(); // 静态代码块 static { System.out.println("静态代码块!"); } // 构造代码块 { System.out.println("普通方法块"); } // 构造方法 public Text() { System.out.println("构造方法初始化"); } public static String getStaticFiles(){ System.out.println("静态属性!"); return "---staticFiles---"; } private String getFiles() { System.out.println("普通属性!"); return "---files---"; } }
this和super均是java中的关键字
this表示当前对象,有3个作用:
调用方法、调用属性、调用对象本身
// 指向当前对象 public class Apple { int num =0; public Apple eatApple(){ num++; return this; // 返回当前对象 } public static void main(String[] args) { Apple apple = new Apple(); // 由于this的原因,eatApple()可以重复调用,哪个对象调用eatApple()方法,都会返回对象本身 apple.eatApple().eatApple(); } }
// 修饰属性,通常用于构造方法 public class Apple { int num =0; public Apple(int num){ this.num = num; } public static void main(String[] args) { Apple apple = new Apple(20); System.out.println(apple.num);// 此时num=20 } }
this()方法必须放在构造方法第一句,否则编译不通过
// 与构造方法一起使用,充当全局关键字 public class Fruit { int num ; String fruit; public Fruit(int num){ this(num,"苹果"); } public Fruit(int num,String fruit){ this.num = num; this.fruit = fruit; } public static void main(String[] args) { Fruit apple = new Fruit(20); System.out.println(apple.num+ "个" +apple.fruit); } }
super与this功能类似,不同的是super操作的对象是父类