抽象:
我们在定义一个类的时候,实际上就是把一类事物的公有的属性和行为提取出来,形成一个物理模型,这种研究问题的方法称为抽象。
封装:
封装就是把抽象的数据和对数据进行的操作封装在一起,数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。
电视机的开关,对音量,颜色,频道的控制是公开的,谁都可以操作,但是对机箱后盖,主机板的操作却不是公开的,一般是由专业维修人员来玩。
那么java中如何实现这种类似的控制?
java提供了四种控制修饰符控制方法和变量访问的权限:
1.public:对外公开
2.protected:对子类和同一包中的类公开
3.没有修饰符号,向同一个包的类公开
4.private:只有类本身可以访问,不对外公开
包-三大作用:
@1.区分相同名字的类
@2.当类很多时,可以很好管理类
@3.控制访问范围
包-打包命令
package com.shunping;
包-命名规范
小写字母 比如 com.sina.shunping
包-常用的包
一个包下,包含很多的类,java中常用的包有:
java.lang.*;包 自动引入java.util.* 工具包
.*;网络开发包 java.awt.*包 窗口工具包
继承:
继承可以解决代码复用问题,让我们编程更加靠近人类的思维,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(比如刚才的Student),在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extend语句来声明继承 父类:
class 子类 extends 父类
这样,子类就会自动拥有父类定义的属性和方法。
继承注意事项:
子类最多继承一个父类java多有类都是Object类的子类JDK6中有202个包3777个类、接口、异常、枚举、注释和错误在做开发的时候,强烈建议大家多查jdk文档
方法重载:
简单地说:方法重载就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。
方法重载-注意事项
1.方法名相同
2.方法的参数类型、个数、顺序至少有一项不同
3.仅仅是返回类型不一样,是不能构成重载的
4.方法修饰符可以不同
5.如果只是控制访问符不同,不能构成重载
方法覆盖:
将父类的方法进行重新写。方法的覆盖就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法,比如上个案例的Cat类中的cry方法就覆盖了Animal类的cry方法。
方法覆盖的注意事项:
(1)子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错。
(2)子类方法不能缩小父类方法的访问权限。(假设父类方法时public,但是你的子类方法改成了protected,这样就会出现报错)
约瑟夫问题:
多态:
所谓多态,就是指一个引用(类型)在不同情况下的多种状态,你也可以这样理解:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。
多态的好处:
后面创建的类是前面创建的那个类的子类,就可以通过父类创建的对象对子类的方法进行访问,一个对象可以访问多个方法。
/***************
* 作者:T.song
* 功能:多态演示
* *****************/
public class grap extends JFrame{
public static void main(String[] args) {
// grap g1 = new grap();
Animal animal = new Cat();
animal.cry();
animal = new Dog();
animal.cry();
}
}
public class Animal {
int age;
String nameString;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public void cry() {
System.out.println("不知道怎么叫····");
}
}
//体现了方法的覆盖
class Cat extends Animal
{
public void cry() {
System.out.println("喵喵喵···");
}
}
class Dog extends Animal
{
public void cry() {
System.out.println("汪汪汪···");
}
}
public class Animal {
int age;
String nameString;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public void cry() {
System.out.println("不知道怎么叫····");
}
public void eat() {
System.out.println("不知道吃什么······");
}
}
//体现了方法的覆盖
class Cat extends Animal
{
public void cry() {
System.out.println("喵喵喵···");
}
}
class Dog extends Animal
{
public void cry() {
System.out.println("汪汪汪···");
}
}
class Food
{
public String name;
public void showName() {
}
}
class Fish extends Food
{
public void showName()
{
System.out.println("鱼···");
}
}
class Bone extends Food
{
public void showName()
{
System.out.println("骨头···");
}
}
class Master
{
//给动物喂食物,使用多态,方法就可以用一个
public void feed(Animal an,Food food) {
an.eat();
food.showName();
}
}
package com.swing;
import javax.swing.*;
/***************
* 作者:T.song
* 功能:多态演示
*
* *****************/
public class grap extends JFrame{
public static void main(String[] args) {
Master master = new Master();
master.feed(new Dog(),new Bone());
}
}
多态注意事项:
java允许父类的引用变量引用它的子类的实例(对象)
Animal animal = new Cat();
这种转换时自动完成的。
如果觉得《抽象 封装 继承 多态--基本理解》对你有帮助,请点赞、收藏,并留下你的观点哦!