面向对象
1.构造器
-
和类名相同
-
没有返回值
-
new本质在调用构造方法
-
初始化对象的值
-
定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造
-
快捷键:Alt+Insert
package com.zhang.oop.demo01; public class Student { //构造器 String name; int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } }
package com.zhang.oop.demo01; public class Application { public static void main(String[] args) { Student studengt = new Student("zhang",34); System.out.println(studengt.name); System.out.println(studengt.age); } }
2.方法重写
非静态:重写 快捷键:Alt+Insert override
静态方法:方法的调用只和左边有关系,定义的数据类型有关。
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小。 public>protected>default>private
- 抛出的异常:范围可以缩小,但不能扩大:ClassNotFoundException --> Exception(大)
为什么要重写
- 父类的功能,子类不一定需要,或者不一定满足。
3.多态
-
多态是方法的多态,属性没有多态
-
父类和子类类型转换异常:ClassCastException
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象:Father f1 = new Son();
-
不能重写的有:static:方法,属于类,不属于实例。 final 常量。 private方法
a继承了b,a重写了b的run()方法,所以a.run()和b.run()运行出来是mad。因为a继承了b中所有的方法,所以都可以调用b中的方法cd()。因为cs()方法是a独有的,所以只有a可以调用,b不能调用。如果想输出b中的run方法可以创建属于b的实例:B b = new B(); b.run();如果想调用a中的cs()方法就得强制转换((A).b).cs();高向低转换。
4.static关键字
public class Person {
{ //第二个运行
System.out.println("匿名代码块");
}
static { //第一个运行 只运行一次
System.out.println("静态代码块");
}
public Person(){ //第三个运行
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person = new Person();
}
}
5.抽象
public abstract class Action{
//abstract 抽象类,属于是单继承 只能让继承它的子类去实现
public abstract void doSomthing(){
//抽象方法,只有方法名字,没有方法的实现
//1.不能new这个抽象类,只能靠子类去实现它
//2.抽象类中可以写普通的方法,抽象方法必须在抽象类中
}
}
6.接口
package com.zhang.oop.demo02;
public interface UserService {
void add(String name); //接口中的所有定义方法其实都是抽象的public abstract(默认的)
void delete(String name);
void update(String name);
void query(String name);
}
package com.zhang.oop.demo02;
public interface TimeService {
void timer();
}
package com.zhang.oop.demo02;
public class UserServiceImpl implements UserService,TimeService {
@Override
public void timer() { //实现了接口的类 就要实现接口中的方法
}
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
}
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法