黑马程序员——面向对象

来源:互联网 发布:河北大数据培训班 编辑:程序博客网 时间:2024/04/29 18:04

---------------------- android培训、java培训、期待与您交流! ----------------------

面向对象

类的继承

javak只支持单继承,
不允许多重继承,
但可以有多层继承,
即一个类可以继承某一个类的子类,
如类B继承了类A,
类C又可以继承类B,
那么类C也间接继承了类A。
子类继承父类,
先调用父类无参构造函数,
如父类只有一个有参构造函数,
则编译器就会报错,
但在子类构造函数里加上一个super,
调用父类有参构造函数,
则编译器就不会报错。
例:
class Person{
 public String name;
 public int age;
 public Person(String name,int age){
  this.name=name;
  this.age=age;
 }
}

class Student extends Person{
 public Student(){
  //super();//隐式调用父类无参构造函数
  super("黄少天",20);//调用父类有参构造函数
 }
}

class TestStudent{
 public static void main(String[] args){
  Student stu=new Student();//先调用子类无参构造函数
 }
}

子类对象实例化过程:
先调用子类对应构造函数,
然后执行构造函数里的super()方法(隐式或显式)
再对父类成员变量进行初始化,
再调用父类对应构造函数,
然后对子类成员变量进行初始化,
最后子类继续往下执行代码。

this表示调用当前类里的成员变量,如没有则去调用父类里的成员变量,
而this()表示调用当前类里的构造函数。

1、为什么super和this调用语句不能同时在一个构造函数中出现?
如果一个构造函数同时出现了super和this语句,编译器就会报错,
因为super和this语句,都作为构造函数第一句出现,
只要执行了两个语句中的一个,那么另一个就不会被执行,
除非它们不在同一个构造函数里。
2、为什么super或this语句只能作为构造函数中的第一句出现?
因为实例化执行,都会最先执行构造函数,
如果不把这两个语句放在构造函数第一句中,那么编译器就会报错,
而且,也就没有意义了。

final

final类不能被继承
final方法不能被重写
final变量不能被赋值

抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。

接口中的方法都是抽象方法,接口中的属性都是常量。
例:

public class B extends A{}

1、A a = new B();//父类接收子类,对象a却只能调用A类里的成员变量和方法,但显示的是子类里重写方法的结果。
2、A a = b

instanceof
例:

if(a instanceof B){//instanceof操作符可以用它来判断一个实例对象是否属于一个类。
 B b= (B)a//把a对象强制转换为b类型
}

接口

接口就好比电脑部件里的主板PCI插槽,而电脑各个部件生产商会严格按照PCI插槽的标准,来生产部件,连接到主板上。

例:

interface PCI{
 public void pciStandard();//pci标准
}
class NetWorkFactory implements PCI{//网卡生产商根据pci标准生产
 private String name="网卡";
 
 public void pciStandard(){
  System.out.println(this.name+"根据pci标准生产");
 }
}
class SoundFactory implements PCI{//声卡生产商根据pci标准生产
 private String name="声卡";
 
 public void pciStandard(){
  System.out.println(this.name+"根据pci标准生产");
 }
}
class MainBoardFactory{//主板生产商

 public void definePCI(PCI pci){//检查符合pci标准
  pci.pciStandard();
 }
 
}

class Machine{//机器检查是否符合标准
 public static void main(String[] args){
  MainBoardFactory mbf=new MainBoardFactory();
  
  mbf.definePCI(new NetWorkFactory());
  mbf.definePCI(new SoundFactory());
 }
}


匿名内部类

一个类如果继承或实现某个类时,就可以使用匿名内部类。

匿名内部类是把对象名省略。

例:(与上面接壤)

  mbf.definePCI(new PCI() {//可以把new接口,看成是子类对象,只是对象没有名字。
   
   @Override
   public void pciStandard() {    
    System.out.println("网卡使用主板PCI槽");
   }
  });
  mbf.definePCI(new PCI() {
   
   @Override
   public void pciStandard() {    
    System.out.println("声卡使用主板PCI槽");
   }
  });

 

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima