封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问 。 封装的好处:1.隐藏类的实现细节. 2.只能通过规定方法访问 . 3.方便加入控制语句. 4.方便修改实现. 具体表现:使用不同的访问权限.
public class Person { private String name; private int age;//属性私有化, 是封装的一种体现, 提供外界能够访问到的方法 public String getName() { return name; } public void setName(String name) { if(name!=null){ this.name = name; } } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
懒汉单例:
public class WindowDemo { static WindowDemo windowDemo=null;//记录创建的那个唯一的对象 //将构造方法私有化,在程序的其他地方就不能随意调用构造方法, private WindowDemo(){ } //向外界提供一个方法,用来获得创建的唯一的对象,在类内部控制起来就比较方方便 public static WindowDemo getWindowDemo(){ if(windowDemo==null){ windowDemo = new WindowDemo(); } return windowDemo; } }
饿汉单例:
//饿汉单例(急切式单例) public class WindowDemo1 { //在加载类的时候,就直接将对象创建,由于是静态,只加载一次 static WindowDemo1 windowDemo=new WindowDemo1(); //将构造方法私有化,在程序的其他地方就不能随意调用构造方法, private WindowDemo1(){ } //向外界提供一个方法,用来获得创建的唯一的对象,在类内部控制起来就比较方方便 public static WindowDemo1 getWindowDemo(){ return windowDemo; } }面向对象特征--继承
继承:继承是面向对象程序设计不可缺少的设计思想,是实现代码可重用的根基,是提高代码可扩展性的主要途径。 1.继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力。 2.在JAVA中使用extends关键字来表示继承关系。 3.JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个直接父类。 6.继承之后子类可以调用父类的所有非私有属性和非私有方法.
什么时侯使用继承:符合is-a关系的设计(什么是什么) 1.继承与真实世界类似.2.只要说“猫是动物”狗也是动物3.继承是代码重用的一种方式,将子类共有的属性和行为放到父类中
继承的形式:[访问权限修饰符] [修饰符] 子类名 extends 父类名{子类体}
名词:·Dog类是 Animal类的子类. Animal类是Dog类的父类.Dog类是 Animal类的派生类. Animal类是Dog类的基类 继承的传递性:C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有非私有属性和非私有方法,当一个没有继承任何一个类时,jvm会默认让类继承Object类,Object是 java为所有类提供的基类
继承中的构造方法:子类构造方法会先调用父类构造方法,使用super关键字调用父类任意一个构造方法,必须写在构造方法的第一行,如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法
方法的重写(OverRide) 应用场景:当父类的方法实现不能满足子类需求时,可以对方法进行重写( override),在子类中可以根据需要对从基类中继承来的方法进行重写。 方法重写规则:1.方法名相同、参数列表相同;2. 返回值类型相同;3.访问权限不能小于父类权限; 注意:构造方法,静态方法不能重写,成员变量不存在重写.
动物类:
public class Animal extends Object{ private String name; private int age; public Animal() { super(); System.out.println("动物类中无参的构造方法"); } public Animal(String name,int age) { super(); this.name = name; this.age = age; System.out.println("动物类中有参的构造方法"); } public Animal(int age,String name) { super(); this.name = name; this.age = age; System.out.println("动物类中有参的构造方法"); } // 动物类具有的功能 public void eat(){ System.out.println("动物吃东西"); } public void sleep(){ System.out.println("动物睡觉"); } public void showInfo(){ System.out.println("名字:"+name+" 年龄:"+age); } // 私有属性访问入口 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
狗:
public class Dog extends Animal{ private String color; public Dog(){ super(); System.out.println("狗类的无参构造方法"); } public Dog(String name,int age,String color){ super(name,age); this.color = color; System.out.println("狗类的有参构造方法"); } public void play(){ System.out.println("狗会玩"); } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
哮天犬:
public class XiaoTiaoQuan extends Dog{ public XiaoTiaoQuan(){ //super();系统默认在第一行调用父类无参构造 System.out.println("哮天犬类的无参构造方法"); } public XiaoTiaoQuan(String name,int age,String color){ super(name,age,color); System.out.println("哮天犬类的有参构造方法"); } @Override public void eat(){ System.out.println("神犬坐着用餐"); System.out.println("神犬坐着用餐"); } public void fly(){ this.eat(); System.out.println("神狗会飞"); } }抽象类
抽象方法:抽象方法是一种特殊的方法,它只有声明,而没有具体的实现,抽象方法必须用abstract关键字进行修饰. 1.如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 2.抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法。 3.用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。 特点: 1.抽象类不能被实例化,但可以有构造方法,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 2.抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类
使用关键字abstract定义抽象类,一般语法:[访问权限] abstract class 类名 {成员列表}
抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能.
// 抽象类: 当一个类中含有不具体的内容时; public abstract class Animal { private String name; private int age; public Animal() { } public Animal(String name, int age) { this.name = name; this.age = age; } public abstract void eat();//抽象类 public void sleep(){ System.out.println("眼睛闭着睡"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃骨头"); } }