java基础之基础

1.什么是不能被继承的?

private,static,synchronized,final(可被继承,但不可被覆盖)

2.关于成员变量被private 修饰,就是不能在子类被继承,但是为什么 例如setter/getter 之类和成员变量直接关联的方法依然可以在子类中使用呢?

父类:

public class Person {
    private String name;
    private int age;

    public  String getName() {
        System.out.println("person.name:"+this.name);
        return name;
    }

    public  void setName(String name) {

        this.name = name;
    }

    public int getAge() {
        System.out.println("person.age:"+this.age);
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

子类:

public class Predisw extends Person {

}

测试:

public class TestPredisw {

    @Test
    public  void TestAdd(){
        Predisw p=new Predisw();
        p.setAge(11);
        p.setName("wang");
        String name1=p.getName();
        int age1=p.getAge();
        System.out.println(name1+":"+age1);

    }
}

person.name:wang
person.age:11
wang:11

变量:

结论:

在new Predisw();的时候,子类的构造器调用了父类的构造器,所以从本质上来说,是创建了一个新的Person 对象.所以对象p 调用setter 方法是修改了这个对象的name 和age.

如果在Predisw 类中添加一个私有变量会如何?

public class Predisw extends Person {
    private String name;

}

运行TestPredisw 时的变量情况如下:

多了一个name 的变量.应该是在new Predisw() 的时候调用了super() 和将这个变量添加到新的Predisw 实例中.所以实际上Predisw 有2个name 变量,并没有覆盖掉父类的同名变量.

这个时候如果在Predisw 类中添加name 的setter/getter 会如何?

public class Predisw extends Person {
    private String name;

    public String getName() {
        System.out.println("predisw.name:"+this.name);
        return name;
    }

    public void setName(String name) {

        this.name = name;
    }
}

运行TestPredisw 中的方法时,变量情况如下:

输出结果如下:

predisw.name:wang
person.age:11
wang:11

结论:继承的方法会调用子类的方法,父类的同名方法被覆盖了.子类的方法只能操作到子类的成员变量,而父类的成员变量是私有的,只有通过父类的setter/getter 才能调用.但是父类的setter/getter 被覆盖了,所以父类的name就无法再被修改了.

时间: 2024-11-09 19:27:13

java基础之基础的相关文章

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

2.2JAVA基础复习——JAVA语言的基础组成运算符和语句

JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号. 6.语句:程序中常用的一些语句. 7.函数:也叫做方法,用来做一些特定的动作. 8.数组:用来存储多个数据的集合. JAVA中的运算符 1.算术运算符:用来进行一些数据算法的符号 算术运算符分为单目运算符.双目运算符.三目运算符. 单目运算符有:+(取正)-(取负)++(自增)--(自减)代码如

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

Java语言的基础知识

第三章 1.在java源文件编辑器中,选择某个成员变量,然后按住shift+alt+j,Eclipse会自动添加JavaDoc文档注释结构,如果选择的是方法,还会自动添加参数名称. 2.Java语言规定标示符是由任意的字母.下划线.美元符号和数字组成,并且第一个字符不能使数字,标示符不能使java中的保留关键字. 3.在Java语言中允许使用汉字或其他语言文字作为变量名,如int 年龄 =21;在程序运行时不会报错,但建议尽量不要使用这些语言作为变量. 4.java用关键字final来声明常量,

[Java 05 OO] (基础篇) 《Java开发实战经典》

p5OO 第五章 面向对象 (基础篇) Notes (1), Constructor / this / String   String str1 = "hello"; 解释 : 是把一个在堆内存空间的使用权给了 str1 对象.   String str2 = "hello"; str1 == str2 是 true   String 字符串的内容不可改变 (2), Java 常用的内存区域    1), 栈内存空间    2), 堆内存空间    3), 全局数据

JAVA学习(五):Java面向对象编程基础

Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目的. 1.OOP的3个特性(封装.继承和多态性) 封装是类的基础.指把类的相关实现细节隐藏起来,在类中将数据和实现操作的代码集中起来放在对象的内部.调用这些类时仅仅需直接使用类预留的接口就能够了. 继承提供了子类自己主动拥有父类数据结构和方法的机制.它表示类之间的一种关系. 多态指使一个对象被看成还

Java并发(基础知识)—— Executor框架及线程池

在Java并发(基础知识)—— 创建.运行以及停止一个线程中讲解了两种创建线程的方式:直接继承Thread类以及实现Runnable接口并赋给Thread,这两种创建线程的方式在线程比较少的时候是没有问题的,但是当需要创建大量线程时就会出现问题,因为这种使用方法把线程创建语句随意地散落在代码中,无法统一管理线程,我们将无法管理创建线程的数量,而过量的线程创建将直接使系统崩溃. 从高内聚角度讲,我们应该创建一个统一的创建以及运行接口,为我们管理这些线程,这个统一的创建与运行接口就是JDK 5的Ex

Java语言的基础知识4

第五章(数组) 1.在Java中可以将数组看做是一个对象虽然基本数据类型不是对象但有基本数据类型组成的数组是对象. 2.对于二维数组求第二维就用array[0].length, array.length就是默认的是第一维的长度. 3.foreach并不是一个新的语法它是for的循环的格式化主要执行遍历功能的循环,example: int arry ={1,2,3,4,5}; for(int i :array){ system.out.println(): } 4.数组元素定义完以后可通过Arra

黑马程序员——Java I/O基础知识之I/O流

I/O流基础知识--字节流和字符流 文件存储在硬盘中,是以二进制表示的,只有内存中才能形成字符.数据的来源可以有硬盘,内存,控制台,网络,Java把数据从一个地方转到另一个地方的现象称为流,用InputStream和OutputStream接口来表示,这两个流里面的都是以字节为单位的,后来加入了Reader和Writer,里面操作的是字符,是两个字节为单位的. 字节流 字节流将数据写入文件 try { File file =new File("d:" +File .separator+

2.1JAVA基础复习——JAVA语言的基础组成注释和常量变量

/** 这是 JAVA中独有的多行注释 */ JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号. 6.语句:程序中常用的一些语句. 7.函数:也叫做方法,用来做一些特定的动作. 8.数组:用来存储多个数据的集合. JAVA中的注释: 注释还可以用来缩小程序错误的范围,方便查找错误. // :表示单行注释. //这是一个单行注释 /**/:表示多行