Java面向对象
2019.12.15 小雨
作为一名程序源(而且还是单身),周末肯定是学Java
今天就来说一下面向对象!!相信都知道个大概,我们要用我们自己的语言来描述、概括。
Java面向对象有三大特性: 封装、继承、多态;(抽象)
1.继承:
子类继承父类,具有父类的属性和方法(为实现多态做了铺垫)
class A {
public A() { // 父类无参构造
System.out.println("*************************") ;
}
}
class B extends A {
public B() { // 子类构造
System.out.println("#########################");
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
}
}
运行结果:
*************************
#########################
构造方法会首先调用父类B的构造方法(默认调用无参构造方法)
子类创建对象调用构造方法首先调用父类的构造方法,然后再调用子类的构造方法;
还有一个小知识点
public class A {
//私有化 name
private String name="继承";
public void Chi() {
System.out.println("属性的名字: "+name);
}
}
public class B extends A{
public void Chi() {
System.out.println("猜对没有");
}
public static void main(String[] args) {
A b =new B();
b.Chi();
}
}
结果为:
猜对没有
在子类重写了父类的方法后就优先调用子类的方法(属性也一样);
2.封装:
装:就是数据、属性和方法都放进类里;封:就是装进去加上权限;内部是透明的之暴露它的访问方法
3.多态:
同一个对象(事物),在不同时刻体现出来的不同状态
public class A {
public void run() {
System.out.println("狗在奔跑!!!");
sing();
}
public void sing() {
System.out.println("狗在唱歌~~~");
}
重点看看下面
public class B extends A{
// 重载run()方法,和父类中的run()方法不是一个
// 向上转型时会丢失该方法
public void run(String anotherAnimal) {
System.out.println(("Lion在追一只" + anotherAnimal));;
sing();
}
// 重写
public void sing() {
System.out.println("狗不唱了~~~");
}
public static void main(String[] args) {
A b =new B();
b.run();
}
结果:
狗在奔跑!!!
狗不唱了~~~
这里呢: 向上转型时会丢失该方法(run()参数列表不同,指向父类;sing()中指向子类);
实现多态的必要条件为:
继承、重写、重载(向上转型或者说父类引用指向子类对象)
其实现机制为:调用那个方法是由被引用对象的类型决定,而不是引用变量的类型决定的,
并且调用的方法必须被子类重写
总结:一定要总结成自己的话;要学会自己概述!!