JAVA面向对象2
一、继承
定义子类:
下面是由继承 Employee 类来定义 Manager 类的格式,关键字 extends 表示继承。
public class Manager extends Employee {
添加方法和域…
}
• 子类可以从父类继承属性和方法
• 子类可以提供自己单独的属性和方法
方法的重写(override)
在子类中可以根据需要对从基类中继承来的方法进行重写。
重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
重写方法不能使用比被重写方法更严格的访问权限。(由于多态)
public class TestOverride { public static void main(String[] args) { Animal animal = new Animal(); animal.shout(); Dog dog = new Dog(); dog.shout(); } } class Animal{ void shout(){ System. o u t.p rin tln (" 发 出 声 音 ! "); } } class Dog extends Animal { void shout(){ System. o u t.p rin tln (" 旺 旺 旺 ! "); } }
Object类
• Object类是所有Java类的根基类
• 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
public class Person {
…
}
等同于:
public class Person extends Object{
…
}
二、封装
1、封装的作用和含义?
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩 展性、可维护性。
我们程序设计要追求“高内聚,低耦合”。
• 高内聚 :就是类的内部数据操作细节自己完成,不允许外部干涉;
• 低耦合 :仅暴露少量的方法给外部使用。
2、使用访问控制符,实现封装
• 成员(成员变量或成员方法)访问权限共有四种:
• public 公共的
可以被项目中所有的类访问。(项目可见性)
• protected 受保护的
可以被这个类本身访问;
同一个包中的所有其他的类访问;
被它的子类(同一个包以及不同包中的子类)访问
• default/friendly 默认的/友好的(包可见性)
被这个类本身访问;
被同一个包中的类访问。
• private 私有的
只能被这个类本身访问。(类可见性)
• 类的访问权限只有两种•
public 公共的
可被同一项目中所有的类访问。 (必须与文件名同名)
default/friendly 默认的/友好的
可被同一个包中的类访问。
三、多态
多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
• java中如何实现多态?使用多态的好处?
引用变量的两种类型:
编译时类型(模糊一点,一般是一个父类)-----由声明时的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类)---- 由实际对应的对象类型决定。
多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象。
class Animal { int age=10; public void shout(){ System.out.println("叫了一声!"); } } class Dog extends Animal { int age=28; public void shout() { System.out.println("旺旺旺!"); } public void gnawBone(){ System.out.println(“我在啃骨头"); } } class Cat extends Animal { int age=18; public void shout() { System.out.println("喵喵喵喵!"); } }
四、final关键字
final可以用来修饰变量,方法,类。
1、修饰变量:变量一旦被初始化便不可改变,相当定义了一常量。
eg: final int x=3; • x=4;
2、修饰方法:final方法是在子类中不能被覆盖的方法
eg:final returnType methodName(paramList){…}
final void eat() { … }
3、修饰类:final类是无法被任何类继承的。
eg:final class finalClassName{ … }
final class Person{ … }
五、super关键字
super是直接父类对象的引用。
可以通过super来访问父类中被子类覆盖的方法或属性。
public class Test { public static void main(String[] args) { new ChildClass().f(); } } class FatherClass { public int value; public void f(){ value = 100; System.out.println("FatherClass.value="+value); } } class ChildClass extends FatherClass { public int value; public void f() { super.f(); value = 200; System.out.println("ChildClass.value="+value); System.out.println(value); System.out.println(super.value); } }
- 点赞
- 收藏
- 分享
- 文章举报
- 黑马程序员_Java基础_面向对象
- JAVA—面向对象
- java面向对象 接口
- Java连载31-递归方法练习、面向对象
- java对象的交互(翁恺讲的java面向对象课)
- java--流程控制、数组、面向对象相关备忘知识点
- 12-5Java面向对象笔记(一)
- java面向对象初识
- java基础十 面向对象基础
- Java 面向对象的程序设计(二)
- Java面向对象-----多态
- java面向对象面试题(1)
- Java面向对象1
- Java(7):面向对象四大基本特性:抽象
- java面向对象思想之数组介绍
- Java-Review-Note——2.面向对象
- Java面向对象——初识面向对象
- Java.面向对象(学习笔记)
- Java面向对象-抽象方法,抽象类和接口
- java语言之面向对象