变量类型 变量名 = 值 Student mo = new Student()
使用new关键字建立对象时,会对建立好的对象进行默认初始化,分配内存空间,以及对类中构造器的调用java
类的构造器:又称构造方法,在建立对象时必需要调用的编程
快捷键:Alt+Ins安全
特色:ide
做用:oop
划分:this
无参构造设计
public class Creation { String name; public Creation(){ this.name = "mo"; } public static void main(String[] args) { Creation creation = new Creation(); System.out.println(creation.name); //mo } }
有参构造code
public class Creation { String name; public Creation(){} //无参构造【加上无参构造,new时既可带参数,也可不带参数】 public Creation(String na){ //有参构造 this.name = na; } public static void main(String[] args) { Creation creation = new Creation("mo"); System.out.println(creation.name); //mo } }
public class Packaging { private String name; private int age; public String getName(){ //get得到这个数据 return this.name; } public void setName(String name){ //set设置这个数据 this.name = name; } public int getAge(){ return this.age; } public void setAge(int age){ if (age>=0 && age<=120){ this.age = age; }else { this.age = 3; } } public static void main(String[] args) { Packaging packaging = new Packaging(); packaging.setName("mo"); System.out.println(packaging.getName()); //mo packaging.setAge(6); System.out.println(packaging.getAge()); //6 } }
继承是类与类之间的关系,一个为子类(派生类)、父类(基类)对象
快捷键:Ctrl+H继承
Object类
super
public class Blank{ public static void main(String args[]){ Student student = new Student(); //同时调用了子类无参构造和父类无参构造 student.eat(); } } class Person{ public Person(){ System.out.println("person的无参构造在调用"); } public void eat(){ System.out.println("person正在吃·····"); } } class Student extends Person{ public Student(){ //隐藏代码,调用子类构造器时会默认调用父类的无参构造 super(); //若是显示父类的无参构造,要放在子类无参构造的第一行 //person的无参构造在调用 System.out.println("student的无参构造在调用"); //student的无参构造在调用 } public void eat(){ super.eat(); //"person正在吃·····" System.out.println("Student正在吃·····"); //"Student正在吃·····" } }
方法重写【override】
多态:同一方法能够根据发送对象的不一样而采用多种不一样的行为方式
存在条件
public class Polymorphic { public static void main(String[] args) { student s1 = new student(); Person s2 = new student(); Object s3 = new student(); s1.eat(); //st_eat s2.eat(); //st_eat 子类重写父类的方法,执行子类的方法 ((student) s2).run(); //st_run 父类不能调用子类独有的方法,但能够将父类强制转为子类(高转低),执行子类的方法 } } class Person{ public void eat(){ System.out.println("Pe_eat"); } } class student extends Person{ public void eat(){ System.out.println("st_eat"); } public void run(){ System.out.println("st_run"); } }
A instanceof B -> 用于判断A是不是B的实例
类型转换【父(高) -> 子(低):强制转换】【子 -> 父:自动转换,但可能丢失子类中独有的方法】
//Person是Student的父类 Person obj = new Student(); Student student = (Student)obj //强制转换,并赋值 student.eat() //转换后就可使用子类的方法
修饰符 abstract,修饰方法则为抽象方法,修饰类则为抽象类
抽象的抽象:约束
public class Abstract { public static void main(String[] args) { //new up1() //报错:'up1' is abstract; cannot be instantiated } } abstract class up1{ public abstract void doSomething(); //抽象方法,只有方法名字,没有方法的实现 } class up2 extends up1{ //子类继承抽象类,要对抽象方法进行重写 @Override public void doSomething() { } }
接口本质是契约、规范,本身没法写方法
声明类的关键字是class,声明接口的关键字是interface
类经过implements继承接口,进行实现
内部类:在一个类的内部再定义一个类
【A类中定义B类,B就为A的内部类,A为B的外部类】