面向对象的三大特性:
1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
类与对象
类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。
一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称 对象名称 = new 类名称() ; 1、单一职责原则 类的功能要单一,不能包罗万象,跟杂货铺似的。 2、开放封闭原则 一个模块对于拓展是开放的,对于修改是封闭的。 3、替换原则 子类可以替换父类出现在父类能够出现的任何地方。
内部类
public class Outer {
private int id=10; public void out(){ System.out.println("这是外部类的方法"); }
//这是内部类
public class Inner{ public void in(){ System.out.println("这是内部类的方法"); } public void getID(){ System.out.println(id); } }
}
成员内部类
public class Demo{
public static void main(String[] args){
//外部使用成员内部类
Outer outter = new Outer(100);
Outer.Inner inner = outter.new Inner();
inner.say(); //输出:200
// 100
}
复制代码
} class Outer {
private double x = 0; public Outer(double x) { this.x = x; } class Inner { private double x=200; //内部类 public void say() { System.out.println(x); System.out.println(Outer.this.x); } } 复制代码
}
可以无条件访问外部类的所有成员属性和成员方法。 注意:当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象
局部内部类
interface Person{ public void say(); }
public class Demo{ public static void main(String[] args){ //局部内部类 class PersonImp implements Person{ @Override public void say(){ System.out.prinln("新编写的局部内部类的say方法内容"); } } PersonImp p=new PersonImp(); //这里像调用haha()方法,但是需要一个Person类,为此专门创建一个class文件类很浪费时间,所以使用局部内部类 haha(p); }
public static void haha(Person p){ } 复制代码
} public static void main(String[] args){
Frame f=new Frame("QQ登陆器"); f.setVisible(true); f.setSize(300,200); class MyWindowListener implements WindowListener{ @Override public void windowClosing(WindowEvent e){ System.out.println("哈哈哈"); } }
MyWindowListener l=new MyWindowListener(); //想要添加一个窗口关闭的事件,可以使用局部类 f.addWindowListener(l); }
局部内部类
interface Person{
public void say(); }
public class Demo{
public static void main(String[] args){ //局部内部类 class PersonImp implements Person{ @Override public void say(){ } } PersonImp p=new PersonImp();
haha(p);
} public static void haha(Person p){ } } 复制代码
public static void main(String[] args){
Frame f=new Frame("QQ登陆器");
f.setVisible(true);
f.setSize(300,200); class MyWindowListener implements WindowListener{ @Override public void windowClosing(WindowEvent e){ System.out.println("哈哈哈"); } } MyWindowListener l=new MyWindowListener(); //想要添加一个窗口关闭的事件,可以使用局部类 f.addWindowListener(l); }
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
匿名内部类
interface Person{
public void say(); 复制代码
} public class Demo{
public static void main(String[] args){ //匿名内部类 Person p=new Person(){ public void say(){ System.out.println("锄禾日当午"); } } haha(p); } public static void haha(Person p){ } }
注意:使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。
静态内部类
public class Demo {
public static void main(String[] args) { Book.Info info = new Book.Info(); info.say(); } }
class Book {
static class Info { public void say(){ System.out.println("这是一本书"); } }
}